管理 Iceberg 表¶
本主题介绍以下任务,以帮助您管理 Iceberg 表:
您还可以将使用外部目录的 Iceberg 表转换为使用 Snowflake 作为 Iceberg 目录的表。要了解更多信息,请参阅 转换 Iceberg 表。
查询 Iceberg 表¶
若要查询 Iceberg 表,用户必须获授予或继承以下权限:
对包含该表的数据库和架构的 USAGE 权限
对表的 SELECT 权限
您可以使用 SELECT 语句查询 Iceberg 表。例如:
SELECT col1, col2 FROM my_iceberg_table;
更新 Iceberg 表¶
您可以使用 INSERT 和 UPDATE 语句修改使用 Snowflake 作为目录的 Iceberg 表。
下面的示例将一个新值插入到名为 store_sales
的 Iceberg 表中,而且,如果 cola
列的值当前为 -99,则将该列的值更新为 1。
INSERT INTO store_sales values (-99);
UPDATE store_sales
SET cola = 1
WHERE cola = -99;
生成 DML 变更的快照¶
对于使用 Snowflake 作为目录的表,Snowflake 会自动生成 Iceberg 元数据。Snowflake 会将元数据写入到外部卷上名为 metadata
的文件夹,该文件夹位于创建表时 BASE_LOCATION
参数指定的位置。
或者,您可以调用 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 函数为新变更生成 Iceberg 元数据。
对于不受 Snowflake 管理的表,该函数将返回有关最新刷新快照的信息。
例如:
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
输出:
+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1') |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"} |
+-----------------------------------------------------------------------------------------------------------+
维护使用外部 Iceberg 目录的表¶
您可以对使用外部目录的 Iceberg 表执行维护操作。
维护操作包括以下内容:
使快照过期
移除旧的元数据文件
压缩数据文件
重要
为了使您的 Iceberg 表与外部更改保持同步,请务必将您的 Snowflake 刷新计划与表维护保持一致。每次执行维护操作时都应 刷新表。
要了解不受 Snowflake 管理的 Iceberg 表的维护信息,请参阅 Apache Iceberg 文档中的 维护 (https://iceberg.apache.org/docs/latest/maintenance/)。
刷新表元数据¶
当您使用外部 Iceberg 目录时,可以使用 ALTER ICEBERG TABLE ...REFRESH 命令刷新表元数据。刷新表元数据会将元数据与最近的表更改同步。
刷新使用 AWS Glue 作为目录的 Iceberg 表的元数据¶
以下示例手动刷新将 AWS Glue 用于 Iceberg 目录的表的元数据。刷新表可使表与 AWS Glue 中发生的任何更改保持同步。
使用这种类型的 Iceberg 表时,您不需要在命令中指定元数据文件路径。
ALTER ICEBERG TABLE my_iceberg_table REFRESH;
刷新从对象存储中的文件创建的 Iceberg 表的元数据¶
以下示例手动刷新从外部云存储位置中的 Iceberg 元数据文件创建的表,并指定元数据文件的相对路径,不带前导正斜杠 (/
)。元数据文件定义刷新后表中的数据。
ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
检索 Iceberg 表的存储指标¶
Snowflake 不会向您的账户收取 Iceberg 表存储费用。但是,您可以通过 Snowflake Information Schema 或 Account Usage 架构中的 TABLE_STORAGE_METRICS 和 TABLES 视图进行查询,以跟踪 Iceberg 表占用了多少存储空间。
下面的示例查询连接了 ACCOUNT_USAGE.TABLE_STORAGE_METRICS 视图和 ACCOUNT_USAGE.TABLES 视图,并根据 TABLES.IS_ICEBERG 列进行筛选。
SELECT metrics.* FROM
snowflake.account_usage.table_storage_metrics metrics
INNER JOIN snowflake.account_usage.tables tables
ON (
metrics.id = tables.table_id
AND metrics.table_schema_id = tables.table_schema_id
AND metrics.table_catalog_id = tables.table_catalog_id
)
WHERE tables.is_iceberg='YES';