组织目录内容¶
本主题说明如何在 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")
使用 Open Catalog 创建顶级命名空间¶
登录 Open Catalog。
从左侧菜单中选择 Catalogs。
从目录列表中,选择要在其中创建顶级命名空间的目录。
选择 *+ Namespace。
在 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")
使用 Open Catalog 创建嵌套命名空间¶
登录 Open Catalog。
从左侧菜单中选择 Catalogs。
从目录列表中,选择要在其中创建嵌套命名空间的目录。
在 Namespaces 选项卡上,导航到要在其中创建嵌套命名空间的父命名空间。
选择 *+ Namespace。
在 Name 中,输入嵌套命名空间的名称,然后选择 Submit。
创建表¶
本节提供使用 Apache Spark 创建表格的示例。
重要
如果在 Snowflake Open Catalog 中删除一个表而不清除它,则不要创建与所删除的表具有相同名称和位置的新表。如果这样做,用户可能会在没有权限访问原始表数据的情况下访问这些数据。例如,如果删除但不清除 Table1
,其存储目录位置为 /MyCatalog/Schema1/Table1
,则不要在同一 Table1
存储目录中创建新的 Table1
。当删除一个表而不清除它时,其数据会保留在外部云存储中。
示例:创建表¶
下面的示例代码将在目录 catalog1
中的嵌套命名空间 namespace1a
下创建 customers
表。它是用 id
和 custnum
两列创建的,两列的数据类型都是 integer
:
spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("CREATE OR REPLACE TABLE customers (id int, custnum int) using iceberg")
示例:在表中插入行¶
以下示例代码将在 customers
表中插入一行:
spark.sql("use catalog1").show()
spark.sql ("use namespace1.namespace1a")
spark.sql("INSERT INTO customers VALUES (123,456)")