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 网站
配置 Snowflake 连接
连接到可通过互联网访问的 Snowflake 数据库没有任何 AWS 先决条件。
或者,您可以执行以下配置,使用 AWS Glue 管理连接凭证。
使用 AWS Glue 管理连接凭证
在 Snowflake 中,生成一个用户
snowflakeUser
和密码snowflakePassword
。在 AWS Secrets Manager 中,使用您的 Snowflake 凭证创建密钥。要在 Secrets Manager 中创建密钥,请按照 AWS Secrets Manager 文档中创建 AWS Secrets Manager 密钥中的教程进行操作。创建密钥后,保留密钥名称
secretName
,以供下一步使用。-
选择键/值对时,请使用键
sfUser
为snowflakeUser
创建一对。 -
选择键/值对时,请使用键
sfPassword
为snowflakePassword
创建一对。 -
选择键/值对时,您可以向 Snowflake 仓库提供键
sfWarehouse
。
-
在 AWS Glue Data Catalog 中,按照 添加 AWS Glue 连接 中的步骤创建连接。创建连接后,保留连接名称
connectionName
,以供下一步使用。选择连接类型时,请选择 Snowflake。
选择 Snowflake URL 时,请提供您的 Snowflake 实例的 URL。URL 将使用表单
中的主机名。account_identifier
.snowflakecomputing.com选择 AWS 密钥时,请提供
secretName
。
在 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 管理连接凭证的步骤,配置 snowflakeUrl
、snowflakeUsername
和 snowflakePassword
。要查看这些步骤,请参阅 配置 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
", } )
此外,您还可以使用 autopushdown
和 query
参数来读取 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 管理连接凭证的步骤,配置 snowflakeUrl
、snowflakeUsername
和 snowflakePassword
。要查看这些步骤,请参阅 配置 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 连接(sfUrl
、sfUser
、sfPassword
)中检索本节中的某些参数,在这种情况下,您无需提供这些参数。您可以提供参数 connectionName
来实现。
您可以从 AWS Secrets Manager 密钥(sfUser
、sfPassword
)中检索本节中的某些参数,在这种情况下,您无需提供这些参数。密钥必须提供 sfUser
和 sfPassword
键下的内容。您可以提供参数 secretId
来实现。
连接到 Snowflake 时通常使用以下参数。
sfDatabase
- 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的数据库。sfSchema
- 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的架构。sfWarehouse
- 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的默认虚拟仓库。sfRole
- 如果未在 Snowflake 中设置用户默认值,则为必填项。用于读/写。连接后用于会话的默认安全角色。-
sfUrl
-(必需)用于读/写。采用以下格式指定账户的主机名:
。有关账户标识符的更多信息,请参阅 Snowflake 文档中的账户标识符account_identifier
.snowflakecomputing.com。 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_catalog
和write_dynamic_frame.from_catalog
方法对 AWS Glue Data Catalog 中的表进行读取和写入。 -
此连接器不支持使用除用户名和密码之外的凭证连接到 Snowflake。
-
流作业中不支持此连接器。
-
此连接器在检索信息(例如使用
query
参数)时支持基于SELECT
语句的查询。不支持其他类型的查询(例如SHOW
、DESC
或 DML 语句)。 -
Snowflake 将通过 Snowflake 客户端提交的查询文本(即 SQL 语句)的大小限制为每条语句 1MB。有关更多详细信息,请参阅查询文字大小的限制
。