View a markdown version of this page

Snowflake 连接 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Snowflake 连接

在 Amazon Glue 4.0 及更高版本中,您可以使用 Amazon Glue for Spark 在 Snowflake 中读取和写入表。您可以通过 SQL 查询从 Snowflake 中读取。您可以通过以下三种方法之一连接到 Snowflake:基本身份验证(使用用户名和密码)、OAuth 身份验证或密钥对身份验证。您可以通过 Amazon Glue Data 连接引用存储在 Amazon Secrets Manager 中的 Snowflake 凭证。用于 Amazon Glue for Spark 的数据连接 Snowflake 凭证与用于爬网程序的 Data Catalog Snowflake 凭证分开存储。必须选择 SNOWFLAKE 类型连接,而不是配置为连接到 Snowflake 的 JDBC 类型连接。

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

配置 Snowflake 连接

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

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

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

    • 对于 OAuth 身份验证:

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

      • 选择键/值对时,请使用键 USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRETOAUTH_CLIENT_SECRET 创建键值对

    • 对于密钥对身份验证:

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

      • 选择键/值对时,请使用键 pem_private_key私有密钥创建键值对

    • 对于基本身份验证:

      • 选择键/值对时,请使用键 USERNAMEsnowflakeUser 创建键值对

      • 选择键/值对时,请使用键 PASSWORDsnowflakePassword 创建键值对

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

    • 选择键/值对时,您可以将对应的 Spark 属性名称作为键,从而提供其他 Snowflake 连接属性。支持的属性包括:

      • sfDatabase:Snowflake 数据库名称

      • sfSchema:Snowflake 架构名称

      • sfRole:Snowflake 角色名称

  2. 在 Amazon Glue Studio 控制台中,通过选择数据连接,然后选择创建连接来创建连接。按照连接向导中的步骤完成该过程:

    • 选择数据来源时,选择 Snowflake,然后选择下一步

    • 输入连接详细信息,例如主机和端口。输入主机 Snowflake URL 时,请提供您的 Snowflake 实例的 URL。URL 通常将使用表单 account_identifier.snowflakecomputing.com 中的主机名。但是,URL 格式可能会有所不同,具体取决于您的 Snowflake 帐户类型(例如,Amazon、Azure 或 Snowflake 托管)。

    • 选择 IAM 服务角色时,从下拉菜单中选择。这是账户中的 IAM 角色,如果指定了 VPC,则该角色将用于访问 Amazon Secrets Manager 和分配 IP。

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

  3. 在向导的下一步中,设置 Snowflake 连接的属性。

  4. 在向导的最后一步中,查看您的设置,然后完成创建连接的过程。

对于托管在 Amazon VPC 中 Amazon 上的 Snowflake,您可能需要以下内容:

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

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

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

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

从 Snowflake 表中读取

先决条件:您想读取的 Snowflake 表。您需要使用 Snowflake 表名 tableName。如果您的 Snowflake 用户没有设置默认命名空间,则需要 Snowflake 数据库名称 databaseName 和架构名称 schemaName。此外,如果您的 Snowflake 用户没有设置默认仓库,则需要仓库名称 warehouseName。为选择要连接的附加网络连接,将使用 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 用户没有设置默认命名空间,则需要 Snowflake 数据库名称 databaseName 和架构名称 schemaName。此外,如果您的 Snowflake 用户没有设置默认仓库,则需要仓库名称 warehouseName。为选择要连接的附加网络连接,将使用 connectionName 参数。

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

Snowflake 连接选项参考

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

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

您可以使用 secretId 参数检索 Amazon Secrets Manager 密钥中的连接参数。如果您使用 Secrets Manager 并且密钥中存在以下 Spark 属性,则系统会自动检索这些属性:

  • sfUser(使用密钥 USERNAMEsfUser

  • sfPassword(使用基本身份验证时,使用密钥 PASSWORDsfPassword

  • sfWarehouse(使用密钥 sfWarehouse

  • sfDatabase(使用密钥 sfDatabase

  • sfSchema(使用密钥 sfSchema

  • sfRole(使用密钥 sfRole

  • pem_private_key(使用密钥对身份验证时,使用密钥 pem_private_key

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET(使用 OAuth 身份验证时)

属性优先顺序:在多个位置指定了相同属性时,Amazon Glue 将按以下优先顺序(从高到低)处理:

  1. 作业代码中显式提供的连接选项

  2. Glue 连接属性

  3. Amazon Secrets Manager 密钥值(指定 secretId 时)

  4. Snowflake 用户默认值

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

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

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

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

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

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

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

  • sfPassword:(使用基本身份验证时必需)用于读/写。Snowflake 用户的密码。

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

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

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET:(使用 OAuth 身份验证时必需)用于读写操作。此值对应于 OAUTH_CLIENT_SECRET,该值可从配置为针对账户启用基于 OAuth 的身份验证的 Snowflake 安全集成中获得。有关更多详细信息,请参阅 Snowflake OAuth 安全集成设置文档——为自定义客户端配置 Snowflake OAuth

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

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

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

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

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

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

Snowflake 身份验证方法

Amazon Glue 支持使用以下身份验证方法连接到 Snowflake:

  • 基本身份验证:提供 sfUsersfPassword 参数。

  • 密钥对身份验证:提供 sfUserpem_private_key 参数。使用密钥对身份验证方法时,sfPassword 参数不是必需的。

  • OAuth 身份验证:Snowflake 连接器支持 AUTHORIZATION_CODE 授权类型,以请求访问 Snowflake 数据。此授权类型被称为“三方 OAuth”,因为该类型需要将用户重定向到第三方授权服务器,用户可在该服务器上进行身份验证并批准访问权限。此方法适用于通过 Amazon Glue 控制台创建连接。

    • 先决条件:要使用此身份验证方法,请确保已完成以下设置:

      • 按照 Snowflake 官方文档《为自定义客户端配置 Snowflake OAuth》中的说明:为自定义客户端配置 Snowflake OAuth

      • 在创建 Snowflake 安全集成时设置正确的重定向 URI。例如:如果您在 DUB(eu-west-1)区域创建连接,您的重定向 URI 应为:https://eu-west-1.console.aws.amazon.com/gluestudio/oauth

      • 创建安全集成后,保留以下信息,以便在创建 Glue 连接时使用:

        • OAUTH_CLIENT_ID:在 Glue 连接创建页面上,此值应作为用户托管客户端应用程序客户端 ID 提供。

        • OAUTH_CLIENT_SECRET:此值应存储在用于连接的 Amazon 密钥中,位于 USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET 键下。

    • OAuth 范围:(可选)定义向 Snowflake 账户请求的具体权限或访问级别。例如,范围可能会限制对特定资源或操作的访问。

      • 此值可按以下格式指定:session:role:Snowflake_Role_Name

      • 示例:session:role:ANALYST_ROLE

    • 授权码 URL:(必填)用户被重定向到的端点,以进行登录并授予授权。

      • 示例:https://host/oauth/authorize

    • 授权令牌 URL:(必填)用于交换访问令牌的授权代码的端点。

      • 示例:https://host/oauth/token-request

    • 用户托管客户端应用程序客户端 ID:(必填)您在 Snowflake 中注册的 OAuth 客户端应用程序的唯一标识符

    • Amazon 密钥:(必填)指包含以下键值对的 Amazon Secrets Manager 密钥:

      • sfUser:Snowflake 用户名

      • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET:与 OAuth 客户端应用程序关联的客户端密钥

这三种身份验证方法都完全受支持,并且可以使用任意连接选项、Glue 连接或 Amazon Secrets Manager 密钥组合进行配置。

Snowflake 连接器限制

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

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

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

  • 此连接器支持基本身份验证、密钥对身份验证以及 OAuth 身份验证。目前不支持其他身份验证方法(例如 SAML)。

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

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

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