管理 Iceberg 表

本主题介绍以下任务,以帮助您管理 Iceberg 表

您还可以将使用外部目录的 Iceberg 表转换为使用 Snowflake 作为 Iceberg 目录的表。要了解更多信息,请参阅 转换 Iceberg 表

查询 Iceberg 表

若要查询 Iceberg 表,用户必须获授予或继承以下权限:

  • 对包含该表的数据库和架构的 USAGE 权限

  • 对表的 SELECT 权限

您可以使用 SELECT 语句查询 Iceberg 表。例如:

SELECT col1, col2 FROM my_iceberg_table;
Copy

更新 Iceberg 表

您可以使用 INSERTUPDATE 语句修改使用 Snowflake 作为目录的 Iceberg 表。

下面的示例将一个新值插入到名为 store_sales 的 Iceberg 表中,而且,如果 cola 列的值当前为 -99,则将该列的值更新为 1。

INSERT INTO store_sales values (-99);

UPDATE store_sales
  SET cola = 1
  WHERE cola = -99;
Copy

生成 DML 变更的快照

对于使用 Snowflake 作为目录的表,Snowflake 会自动生成 Iceberg 元数据。Snowflake 会将元数据写入到外部卷上名为 metadata 的文件夹,该文件夹位于创建表时 BASE_LOCATION 参数指定的位置。

或者,您可以调用 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 函数为新变更生成 Iceberg 元数据。

对于不受 Snowflake 管理的表,该函数将返回有关最新刷新快照的信息。

例如:

SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Copy

输出:

+-----------------------------------------------------------------------------------------------------------+
| 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;
Copy

刷新从对象存储中的文件创建的 Iceberg 表的元数据

以下示例手动刷新从外部云存储位置中的 Iceberg 元数据文件创建的表,并指定元数据文件的相对路径,不带前导正斜杠 (/)。元数据文件定义刷新后表中的数据。

ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Copy

检索 Iceberg 表的存储指标

Snowflake 不会向您的账户收取 Iceberg 表存储费用。但是,您可以通过 Snowflake Information SchemaAccount 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';
Copy
语言: 中文