组织目录内容

本主题说明如何在 Snowflake Open Catalog 中为内部目录创建命名空间和表。

重要

如果在 Snowflake Open Catalog 中删除一个表而不清除它,则不要创建与所删除的表具有相同名称和位置的新表。如果这样做,用户可能会在没有权限访问原始表数据的情况下访问这些数据。例如,如果删除但不清除 Table1,其存储目录位置为 /MyCatalog/Schema1/Table1,则不要在同一 Table1 存储目录中创建新的 Table1。当删除一个表而不清除它时,其数据会保留在外部云存储中。

重要

为确保正确执行为目录定义的访问权限,必须满足以下条件:

  • 一个目录只包含属于一个表的数据文件。

  • 目录层次结构与目录的命名空间层次结构相匹配。

例如,如果目录包括以下项目:

  • 顶级命名空间 namespace1

  • 嵌套命名空间 namespace1a

  • 在嵌套命名空间 namespace1a 下分组的 customers

  • 在嵌套命名空间 namespace1a 下分组的 orders

目录的目录层次结构必须是:

  • /namespace1/namespace1a/customers/<files for the customers table *only*>

  • /namespace1/namespace1a/orders/<files for the orders table *only*>

这些条件适用于内部和外部目录,包括包含 Snowflake 管理的 Apache Iceberg™ 表 的外部目录。在内部目录中创建表时,Open Catalog 禁止在现有表的目录或子目录中创建表。在外部目录中创建 Snowflake 管理的 Iceberg 表时,Open Catalog 不会禁止目录位置重叠。因此,在创建这些表时,请使用 BASE_LOCATION 参数为每个表指定唯一的父目录。有关更多信息,请参阅 CREATE ICEBERG TABLE(使用 Snowflake 作为 Iceberg 目录)

有关内部和外部目录的更多信息,请参阅 目录类型

组织目录内容

目录管理员可以使用 Open Catalog 或第三方查询引擎按如下方式组织目录内容:

对象

使用

命名空间

<ul><li>Open Catalog</li><li>第三方查询引擎</li></ul>

第三方查询引擎

注意

外部目录的表和命名空间在 Open Catalog 中是只读的。如果需要为外部目录组织目录内容,则必须使用 Snowflake。有关更多信息,请参阅 Snowflake 管理的 Apache Iceberg™ 表

本主题中的示例代码展示了如何使用 Apache Spark 来组织目录内容。示例代码位于 PySpark 中。

创建命名空间

本节提供创建顶级或嵌套命名空间的说明。

重要

创建命名空间时,不要在命名空间中使用句点或空格。

创建顶级命名空间

要创建顶级命名空间,可以使用 Apache Spark 或 Open Catalog。

示例:使用 Apache Spark 创建顶级命名空间

下面的示例代码将在目录 catalog1 中创建一个名为 namespace1 的顶级命名空间:

spark.sql("use catalog1").show()
spark.sql("CREATE NAMESPACE namespace1")
Copy

使用 Open Catalog 创建顶级命名空间

  1. 登录 Open Catalog。

  2. 从左侧菜单中选择 Catalogs

  3. 从目录列表中,选择要在其中创建顶级命名空间的目录。

  4. 选择 *+ Namespace

  5. Name 中,输入命名空间的名称,然后选择 Submit

创建嵌套命名空间

要创建嵌套命名空间,可以使用 Apache Spark 或 Open Catalog。

示例:使用 Apache Spark 创建嵌套命名空间

下面的示例代码将在目录 catalog1 中创建名为 namespace1a 的嵌套命名空间。这个嵌套命名空间是在现有顶级命名空间 namespace1 下创建的:

spark.catalog.setCurrentCatalog("catalog1")
spark.sql("use catalog1").show()
spark.sql("CREATE NAMESPACE namespace1.namespace1a")
Copy

使用 Open Catalog 创建嵌套命名空间

  1. 登录 Open Catalog。

  2. 从左侧菜单中选择 Catalogs

  3. 从目录列表中,选择要在其中创建嵌套命名空间的目录。

  4. Namespaces 选项卡上,导航到要在其中创建嵌套命名空间的父命名空间。

  5. 选择 *+ Namespace

  6. Name 中,输入嵌套命名空间的名称,然后选择 Submit

创建表

本节提供使用 Apache Spark 创建表格的示例。

重要

如果在 Snowflake Open Catalog 中删除一个表而不清除它,则不要创建与所删除的表具有相同名称和位置的新表。如果这样做,用户可能会在没有权限访问原始表数据的情况下访问这些数据。例如,如果删除但不清除 Table1,其存储目录位置为 /MyCatalog/Schema1/Table1,则不要在同一 Table1 存储目录中创建新的 Table1。当删除一个表而不清除它时,其数据会保留在外部云存储中。

示例:创建表

下面的示例代码将在目录 catalog1 中的嵌套命名空间 namespace1a 下创建 customers 表。它是用 idcustnum 两列创建的,两列的数据类型都是 integer

spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("CREATE OR REPLACE TABLE customers (id int, custnum int) using iceberg")
Copy

示例:在表中插入行

以下示例代码将在 customers 表中插入一行:

spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("INSERT INTO customers VALUES (123,456)")
Copy
语言: 中文