Snowflake 连接 - AWS Glue

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Snowflake 连接

在 AWS Glue 4.0 及更高版本中,您可以使用 AWS Glue for Spark 在 Snowflake 中读取和写入表。您可以通过 SQL 查询从 Snowflake 中读取。您可以使用用户名和密码连接到 Snowflake。您可以通过 AWS Glue Data Catalog 引用存储在 AWS Secrets Manager 中的 Snowflake 凭证。用于 AWS Glue for Spark 的 Data Catalog Snowflake 凭证与用于爬网程序的 Data Catalog Snowflake 凭证分开存储。必须选择 SNOWFLAKE 类型连接,而不是配置为连接到 Snowflake 的 JDBC 类型连接。

有关 Snowflake 的更多信息,请参阅 Snowflake 网站。有关 AWS 上 Snowflake 的更多信息,请参阅 Snowflake Data Warehouse on Amazon Web Services

配置 Snowflake 连接

连接到可通过互联网访问的 Snowflake 数据库没有任何 AWS 先决条件。

或者,您可以执行以下配置,使用 AWS Glue 管理连接凭证。

使用 AWS Glue 管理连接凭证
  1. 在 Snowflake 中,生成一个用户 snowflakeUser 和密码 snowflakePassword

  2. 在 AWS Secrets Manager 中,使用您的 Snowflake 凭证创建密钥。要在 Secrets Manager 中创建密钥,请按照 AWS Secrets Manager 文档中创建 AWS Secrets Manager 密钥中的教程进行操作。创建密钥后,保留密钥名称 secretName,以供下一步使用。

    • 选择键/值对时,请使用键 sfUsersnowflakeUser 创建一对。

    • 选择键/值对时,请使用键 sfPasswordsnowflakePassword 创建一对。

    • 选择键/值对时,您可以向 Snowflake 仓库提供键 sfWarehouse

  3. 在 AWS Glue Data Catalog 中,按照 添加 AWS Glue 连接 中的步骤创建连接。创建连接后,保留连接名称 connectionName,以供下一步使用。

    • 选择连接类型时,请选择 Snowflake。

    • 选择 Snowflake URL 时,请提供您的 Snowflake 实例的 URL。URL 将使用表单 account_identifier.snowflakecomputing.com 中的主机名。

    • 选择 AWS 密钥时,请提供 secretName

  4. 在 AWS Glue 作业配置中,提供 connectionName 作为附加网络连接

在以下情况下,您可能需要以下内容:

  • 适用于托管在 AWS 中 Amazon VPC 上的 Snowflake

    • 您需要对 Snowflake 进行适当的 Amazon VPC 配置。有关如何配置 Amazon VPC 的更多信息,请参阅 Snowflake 文档中的 AWS PrivateLink & Snowflake

    • 您需要对 AWS Glue 进行适当的 Amazon VPC 配置。AWS Glue 和接口 VPC 端点 (AWS PrivateLink)

    • 您需要创建一个提供 Amazon VPC 连接信息的 AWS Glue Data Catalog 连接(以及定义您的 Snowflake 安全凭证的 AWS Secrets Manager 密钥 ID)。使用 AWS PrivateLink 时您的 URL 将发生变化,如前一项目中链接的 Snowflake 文档中所述。

    • 您需要在作业配置中将 Data Catalog 连接作为附加网络连接包括在内。

从 Snowflake 表中读取

先决条件:您想读取的 Snowflake 表。您需要使用 Snowflake 表名 tableName。您需要 Snowflake url snowflakeUrl、用户名 snowflakeUser 和密码 snowflakePassword。如果您的 Snowflake 用户没有设置默认命名空间,则需要 Snowflake 数据库名称 databaseName 和架构名称 schemaName。此外,如果您的 Snowflake 用户没有设置默认仓库,则需要仓库名称 warehouseName

例如:

其他先决条件:完成使用 AWS Glue 管理连接凭证的步骤,配置 snowflakeUrlsnowflakeUsernamesnowflakePassword。要查看这些步骤,请参阅 配置 Snowflake 连接 上一节。为选择要连接的附加网络连接,我们将使用 connectionName 参数。

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

此外,您还可以使用 autopushdownquery 参数来读取 Snowflake 表的一部分。这可能比在结果加载到 Spark 后对其进行筛选要有效得多。举一个例子,其中所有销售额都存储在同一个表中,但您只需要分析假日期间某家商店的销售额即可。如果这些信息存储在表中,则可以使用谓词下推来检索结果,如下所示:

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

写入 Snowflake 表

先决条件:您要写入的 Snowflake 数据库。您将需要一个最新或所需的表名,如 tableName。您需要 Snowflake url snowflakeUrl、用户名 snowflakeUser 和密码 snowflakePassword。如果您的 Snowflake 用户没有设置默认命名空间,则需要 Snowflake 数据库名称 databaseName 和架构名称 schemaName。此外,如果您的 Snowflake 用户没有设置默认仓库,则需要仓库名称 warehouseName

例如:

其他先决条件:完成使用 AWS Glue 管理连接凭证的步骤,配置 snowflakeUrlsnowflakeUsernamesnowflakePassword。要查看这些步骤,请参阅 配置 Snowflake 连接 上一节。为选择要连接的附加网络连接,我们将使用 connectionName 参数。

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Snowflake 连接选项参考

Snowflake 连接类型采用以下连接选项:

您可以从 Data Catalog 连接(sfUrlsfUsersfPassword)中检索本节中的某些参数,在这种情况下,您无需提供这些参数。您可以提供参数 connectionName 来实现。

您可以从 AWS Secrets Manager 密钥(sfUsersfPassword)中检索本节中的某些参数,在这种情况下,您无需提供这些参数。密钥必须提供 sfUsersfPassword 键下的内容。您可以提供参数 secretId 来实现。

连接到 Snowflake 时通常使用以下参数。

  • sfDatabase - 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的数据库。

  • sfSchema - 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的架构。

  • sfWarehouse - 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的默认虚拟仓库。

  • sfRole - 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的默认安全角色。

  • sfUrl -(必需)用于读/写。采用以下格式指定账户的主机名:account_identifier.snowflakecomputing.com。有关账户标识符的更多信息,请参阅 Snowflake 文档中的 Account Identifiers

  • sfUser -(必需)用于读/写。Snowflake 用户的登录名。

  • sfPassword —(除非提供 pem_private_key,否则为必填项)用于读/写。Snowflake 用户的密码。

  • dbtable - 处理完整表格时为必填项。用于读/写。要读取的表的名称或要写入数据的表的名称。读取时,将检索所有列和记录。

  • pem_private_key - 用于读/写。未加密的 b64 编码私钥字符串。Snowflake 用户的私钥。通常将其从 PEM 文件中复制出来。有关更多信息,请参阅 Snowflake 文档中的密钥对身份验证和密钥对轮换

  • query - 使用查询读取时为必填项。用于读取。要运行的确切查询(SELECT 语句)

以下选项用于配置连接到 Snowflake 过程中的特定行为。

  • preactions - 用于读/写。有效值:以分号分隔的 SQL 语句列表作为字符串。SQL 语句在 AWS Glue 和 Snowflake 之间传输数据之前运行。如果语句包含 %s,则 %s 将替换为操作所引用的表名。

  • postactions - 用于读/写。SQL 语句在 AWS Glue 和 Snowflake 之间传输数据之后运行。如果语句包含 %s,则 %s 将替换为操作所引用的表名。

  • autopushdown - 默认值:"on"。有效值:"on""off"。此参数控制是否启用自动查询下推。如果启用了下推,那么当在 Spark 上运行查询时,如果可以将部分查询“下推”到 Snowflake 服务器,则会将其下推。这提高了某些查询的性能。有关是否可以下推查询的信息,请参阅 Snowflake 文档中的 Pushdown

此外,AWS Glue 可能支持 Snowflake Spark 连接器上可用的某些选项。有关 Snowflake Spark 连接器上可用选项的更多信息,请参阅 Snowflake 文档中的 Setting Configuration Options for the Connector

Snowflake 连接器限制

使用 AWS Glue for Spark 连接到 Snowflake 需要遵守以下限制。

  • 此连接器不支持作业书签。有关作业书签的更多信息,请参阅 使用作业书签跟踪已处理的数据

  • 此连接器不支持 Snowflake 使用 create_dynamic_frame.from_catalogwrite_dynamic_frame.from_catalog 方法对 AWS Glue Data Catalog 中的表进行读取和写入。

  • 此连接器不支持使用除用户名和密码之外的凭证连接到 Snowflake。

  • 流作业中不支持此连接器。

  • 此连接器在检索信息(例如使用 query 参数)时支持基于 SELECT 语句的查询。不支持其他类型的查询(例如 SHOWDESC 或 DML 语句)。

  • Snowflake 将通过 Snowflake 客户端提交的查询文本(即 SQL 语句)的大小限制为每条语句 1MB。有关更多详细信息,请参阅 Limits on Query Text Size