将 Snowflake 管理的表与 Snowflake Open Catalog 同步

要使用 Apache Spark™ 等第三方引擎查询 Snowflake 托管的 Apache Iceberg™ 表,可以将表与 Snowflake Open Catalog 同步。

本主题介绍如何使用 Snowflake 中的目录集成和 Open Catalog 中的外部目录将 Snowflake 管理的 Iceberg 表与 Snowflake Open Catalog 同步。

第 1 步:创建外部暂存区

如果您还没有,请先在 Snowflake 中创建一个外部卷,该卷提供对要存储表数据和元数据的云存储位置的访问权限。

完成云存储服务的说明:

第 2 步:配置 Open Catalog 资源

接下来,完成本节中的步骤,在 Open Catalog 账户中创建外部目录和服务连接。

  1. 按照 创建目录 中的说明,在 Open Catalog 账户中创建外部目录。确保为外部目录配置了以下设置:

    Open Catalog 将 Snowflake 管理的表同步到此外部目录。

  2. 如果您还没有 Snowflake 的服务连接,请按照 配置服务连接 中的说明在您的 Open Catalog 账户中为 Snowflake 引擎创建连接。

  3. 为外部目录配置目录角色,该角色具有允许访问外部目录的权限。有关说明,请参阅 向目录授予权限

    目录角色必须对目录具有以下特权:

    • TABLE_CREATE

    • TABLE_WRITE_PROPERTIES

    • TABLE_DROP

    • NAMESPACE_CREATE

    • NAMESPACE_DROP

    您可以将这些特权中的每一个授予目录角色,也可以授予 CATALOG_MANAGE_CONTENT 特权,其中包括这些权限。有关更多信息,请参阅 Snowflake Open Catalog 的目录特权

  4. 将目录角色附加到服务连接的主体角色。这允许服务连接访问目录。有关说明,请参阅 向主体角色授予目录角色

第 3 步:为 Open Catalog 创建目录集成

通过 CREATE CATALOG INTEGRATION (Snowflake Open Catalog) 命令为 Open Catalog 创建目录集成。对于 WAREHOUSE,指定您在 Open Catalog 账户中配置的外部目录的名称。

要解决创建目录集成时出现的问题,请参阅 您无法为 Open Catalog 创建目录集成

CREATE OR REPLACE CATALOG INTEGRATION my_open_catalog_int
  CATALOG_SOURCE = POLARIS
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'myOpenCatalogNamespace'
  REST_CONFIG = (
    CATALOG_URI = 'https://<orgname>.<my-snowflake-open-catalog-account-name>.snowflakecomputing.cn/polaris/api/catalog'
    WAREHOUSE = 'myOpenCatalogExternalCatalogName'
  )
  REST_AUTHENTICATION = (
    TYPE = OAUTH
    OAUTH_CLIENT_ID = 'myClientId'
    OAUTH_CLIENT_SECRET = 'myClientSecret'
    OAUTH_ALLOWED_SCOPES = ('PRINCIPAL_ROLE:ALL')
  )
  ENABLED = TRUE;
Copy

备注

您可以使用此目录集成来同步一个或多个 Snowflake 管理的表。

第 4 步:创建 Snowflake 管理的表

使用 CREATE ICEBERG TABLE(使用 Snowflake 作为 Iceberg 目录) 命令创建 Snowflake 管理的 Iceberg 表。

重要

要确保在 Open Catalog 中对表正确实施特权,请确保在创建表之前满足特定条件。这些条件与目录的目录结构层次结构有关。有关这些条件以及如何满足这些条件的说明,请参阅 Snowflake Open Catalog 文档中 组织目录内容 中的说明。

对于 CATALOG_SYNC 参数,请为 Open Catalog 目录集成指定名称。

要排查创建 Snowflake 管理的表的问题,请参阅 您无法创建 Snowflake 管理的表

CREATE OR REPLACE ICEBERG TABLE my_managed_iceberg_table (col1 INT)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'my_managed_iceberg_table'
  CATALOG_SYNC = 'my_open_catalog_int';
Copy

当您在 Snowflake 中修改表时,更改会自动与 Open Catalog 账户中的外部目录同步。其他引擎(如 Apache Spark™)可以通过连接到 Open Catalog 查询表。

语言: 中文