Amazon Athena Snowflake 连接器
适用于 Snowflake
此连接器可以作为联合目录注册到 Glue Data Catalog。此连接器支持 Lake Formation 中在目录、数据库、行和标签级别定义的数据访问控制。此连接器使用 Glue 连接将配置属性集中保存到 Glue 中。
先决条件
可以使用 Athena 控制台或 Amazon Serverless Application Repository 将该连接器部署到您的 Amazon Web Services 账户。有关更多信息,请参阅创建数据来源连接或使用 Amazon Serverless Application Repository 部署数据来源连接器。
限制
-
不支持写入 DDL 操作。
-
在多路复用器设置中,溢出桶和前缀在所有数据库实例之间共享。
-
任何相关的 Lambda 限制。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Lambda 配额。
-
目前,不支持单个拆分的 Snowflake 视图。
-
在 Snowflake 中,由于对象名称区分大小写,因此两个表能分别以小写和大写形式具有相同的名称(例如
EMPLOYEE
和employee
)。在 Athena 联合查询中,架构表名称以小写形式提供给 Lambda 函数。要解决此问题,您可以提供@schemaCase
查询提示,用于从名称区分大小写的表中检索数据。以下是两个带有查询提示的示例查询。SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=lower"
-
如果您将 Snowflake 连接迁移到 Glue Catalog 和 Lake Formation,则默认情况下 Athena 不会将所有请求转换为大写或支持注释。Glue 连接的默认行为不会调整大小写。
Snowflake 支持以下选择大小写模式:
-
NONE(使用 Glue 连接的连接器的默认选择)
-
CASE_INSENSITIVE_SEARCH
-
ANNOTATION(不使用 Glue 连接的连接器的默认选择)
-
术语
以下术语与 Snowflake 连接器有关。
-
数据库实例 — 部署在本地、Amazon EC2 或 Amazon RDS 上的任何数据库实例。
-
处理程序 — 访问您数据库实例的 Lambda 处理程序。处理程序可以用于元数据或数据记录。
-
元数据处理程序 — 从您的数据库实例中检索元数据的 Lambda 处理程序。
-
记录处理程序 — 从您的数据库实例中检索数据记录的 Lambda 处理程序。
-
复合处理程序 — 从您的数据库实例中检索元数据和数据记录的 Lambda 处理程序。
-
属性或参数 — 处理程序用来提取数据库信息的数据库属性。您可以将这些属性配置为 Lambda 环境变量。
-
连接字符串 — 用于建立数据库实例连接的文本字符串。
-
目录 — 向 Athena 注册的非 Amazon Glue 目录,是
connection_string
属性的必要前缀。 -
多路复用处理程序 — 可以接受和使用多个数据库连接的 Lambda 处理程序。
参数
使用本节中的参数来配置 Snowflake 连接器。
数据类型支持
下表显示了适用于 JDBC 和 Apache Arrow 的相应数据类型。
JDBC | Arrow |
---|---|
布尔值 | 位 |
整数 | Tiny |
短型 | Smallint |
整数 | Int |
长整型 | Bigint |
浮点数 | Float4 |
双精度 | Float8 |
日期 | DateDay |
Timestamp | DateMilli |
字符串 | Varchar |
字节 | Varbinary |
BigDecimal | 十进制 |
ARRAY | 列表 |
数据类型转换
除了 JDBC 到 Arrow 的转换外,连接器还执行某些其他转换,以使 Snowflake 源和 Athena 数据类型兼容。这些转换有助于确保成功执行查询。下表显示了这些转换。
源数据类型 (Snowflake) | 转换后的数据类型 (Athena) |
---|---|
TIMESTAMP | TIMESTAMPMILLI |
DATE | TIMESTAMPMILLI |
INTEGER | INT |
DECIMAL | BIGINT |
TIMESTAMP_NTZ | TIMESTAMPMILLI |
所有其他不支持的数据类型都转换为 VARCHAR
。
分区和拆分
分区用于确定如何为该连接器生成拆分。Athena 将构建一个 varchar
类型的合成列,它将展示表的分区方案,以帮助该连接器生成拆分。该连接器不会修改实际的表定义。
若要创建此合成列和分区,Athena 需要定义主键。但是,由于 Snowflake 不强制执行主键约束,您必须自己强制执行唯一性。不这样做会导致 Athena 默认为单次拆分。
性能
为了获得最佳性能,请尽可能在查询中使用筛选条件。此外,我们强烈建议使用本机分区来检索具有均匀分区分布的大型数据集。选择列的子集可以显著减少查询运行时及扫描的数据。Snowflake 连接器能够灵活地应对并发造成的节流。
Athena Snowflake 连接器执行谓词下推,以减少查询扫描的数据量。LIMIT
子句、简单谓词和复杂表达式将下推到连接器,以减少扫描数据量并缩短查询执行的运行时间。
LIMIT 子句
LIMIT N
语句用于减少查询扫描的数据量。LIMIT N
下推时,连接器仅向 Athena 返回 N
行。
Predicates
谓词是 SQL 查询的 WHERE
子句中的表达式,其评估结果为布尔值并根据多个条件筛选行。Athena Snowflake 连接器可以组合这些表达式并将其直接推送到 Snowflake,以增强功能并减少扫描的数据量。
以下 Athena Snowflake 连接器运算符支持谓词下推:
-
布尔值:AND、OR、NOT
-
相等:EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_THAN_OR_EQUAL、IS_DISTINCT_FROM、NULL_IF、IS_NULL
-
算术:ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE
-
其他:LIKE_PATTERN、IN
组合下推示例
要增强查询功能,组合下推类型,如以下示例所示:
SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') LIMIT 10;
传递查询
Snowflake 连接器支持传递查询。传递查询使用表函数将完整查询下推到数据来源来执行查询。
要在 Snowflake 中执行传递查询,可以使用以下语法:
SELECT * FROM TABLE( system.query( query => '
query string
' ))
以下示例查询将查询下推到 Snowflake 中的数据来源。该查询选择了 customer
表中的所有列,将结果限制为 10。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
许可证信息
使用此连接器,即表示您确认包含第三方组件(这些组件的列表可在此连接器的 pom.xml
其他资源
有关最新 JDBC 驱动程序版本信息,请参见 GitHub.com 上适用于 Snowflake 连接器的 pom.xml
有关此连接器的更多信息,请访问 GitHub.com 上的相应站点