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 的更多信息,请参阅 Amazon Web Services 上的 Snowflake 数据仓库

配置 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 文档中的账户标识符

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

  • sfPassword -(必需)用于读/写。Snowflake 用户的密码。

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

  • 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 文档中的下推

此外,AWS Glue 可能支持 Snowflake Spark 连接器上可用的某些选项。有关 Snowflake Spark 连接器上可用选项的更多信息,请参阅 Snowflake 文档中的设置连接器的配置选项

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。有关更多详细信息,请参阅查询文字大小的限制