Amazon Athena Google Cloud Storage 连接器
借助 Amazon Athena Google Cloud Storage 连接器,Amazon Athena 可以对存储在 Google Cloud Storage(GCS)存储桶中的 Parquet 和 CSV 文件运行查询。将一个或多个 Parquet 或 CSV 文件分组到 GCS 存储桶中的未分区或已分区文件夹中后,即可以在 AWS Glue
如果您在账户中启用了 Lake Formation,则您在 AWS Serverless Application Repository 中部署的 Athena 联合身份 Lambda 连接器的 IAM 角色必须在 Lake Formation 中具有 AWS Glue Data Catalog 的读取权限。
有关介绍如何使用 Athena 对 GCS 存储桶中的 Parquet 或 CSV 文件运行查询的文章,请参阅 AWS 大数据博客文章使用 Use Amazon Athena to query data stored in Google Cloud Platform
先决条件
-
根据您在 Google Cloud Storage 中的存储桶和文件夹设置对应的 AWS Glue 数据库和表。有关详细步骤,请参阅本文档后面的 在 AWS Glue 中设置数据库和表 部分。
可以使用 Athena 控制台或 AWS Serverless Application Repository 将该连接器部署到您的 AWS 账户。有关更多信息,请参阅部署数据来源连接器或使用 AWS Serverless Application Repository 部署数据来源连接器。
限制
-
不支持写入 DDL 操作。
-
任何相关的 Lambda 限制。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的 Lambda 配额。
-
目前,此连接器仅支持分区列的
VARCHAR
类型(AWS Glue 表 Schema 中的string
或varchar
)。当您在 Athena 中查询其他分区字段类型时会引发错误。
术语
以下术语与 GCS 连接器有关。
-
处理程序 – 访问您的 GCS 存储桶的 Lambda 处理程序。处理程序可以用于元数据或数据记录。
-
元数据处理程序 – 从您的 GCS 存储桶中检索元数据的 Lambda 处理程序。
-
记录处理程序 – 从您的 GCS 存储桶中检索数据记录的 Lambda 处理程序。
-
复合处理程序 – 从您的 GCS 存储桶中检索元数据和数据记录的 Lambda 处理程序。
支持的文件类型
GCS 连接器支持 Parquet 和 CSV 文件类型。
注意
注意不要将 CSV 和 Parquet 文件放在同一 GCS 存储桶或路径中。这样做可能会导致尝试以 CSV 格式读取 Parquet 文件,或相反操作,从而出现运行时错误。
参数
使用这一部分中的 Lambda 环境变量来配置 GCS 连接器。
-
spill_bucket - 为超出 Lambda 函数限制的数据指定 Amazon S3 存储桶。
-
spill_prefix -(可选)默认为指定
spill_bucket
(称为athena-federation-spill
)中的子文件夹。我们建议您在此位置配置 Amazon S3 存储生命周期,以删除早于预定天数或小时数的溢出内容。 -
spill_put_request_headers —(可选)用于溢出的 Amazon S3
putObject
请求的请求标头和值的 JSON 编码映射(例如{"x-amz-server-side-encryption" : "AES256"}
)。有关其他可能的标头,请参阅《Amazon Simple Storage Service API 参考》中的 PutObject。 -
kms_key_id -(可选)默认情况下,将使用经过 AES-GCM 身份验证的加密模式和随机生成的密钥对溢出到 Amazon S3 的任何数据进行加密。要让您的 Lambda 函数使用 KMS 生成的更强的加密密钥(如
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331
),您可以指定 KMS 密钥 ID。 -
disable_spill_encryption -(可选)当设置为
True
时,将禁用溢出加密。默认值为False
,此时将使用 AES-GCM 对溢出到 S3 的数据使用进行加密 - 使用随机生成的密钥,或者使用 KMS 生成密钥。禁用溢出加密可以提高性能,尤其是当您的溢出位置使用服务器端加密时。 -
secret_manager_gcp_creds_name - AWS Secrets Manager 中的密钥名称,包含 JSON 格式的 GCS 凭证(例如
GoogleCloudPlatformCredentials
)。
在 AWS Glue 中设置数据库和表
由于 GCS 连接器的内置 Schema 推理能力有限,因此我们建议您使用 AWS Glue 来处理元数据。下面的过程演示了如何在 AWS Glue 中创建您可以从 Athena 访问的数据库和表。
在 AWS Glue 中创建数据库
您可以通过 AWS Glue 控制台创建可以与 GCS 连接器一起使用的数据库。
在 AWS Glue 创建数据库
登录 AWS Management Console,然后打开 AWS Glue 控制台,网址为:https://console.aws.amazon.com/glue/
。 -
从导航窗格中选择 Databases(数据库)。
-
选择 Add database(添加数据库)。
-
对于 Name(名称),输入您要用于 GCS 连接器的数据库名称。
-
在位置中,指定
google-cloud-storage-flag
。此位置将告诉 GCS 连接器,AWS Glue 数据库包含要在 Athena 中查询的 GCS 数据的表。此连接器会识别 Athena 中具有此标志的数据库,并且会忽略没有此标志的数据库。 -
选择创建数据库。
在 AWS Glue 中创建表
现在您可以为该数据库创建一个表。创建用于 GCS 连接器的 AWS Glue 表时,您必须指定额外的元数据。
在 AWS Glue 控制台中创建表
-
在 AWS Glue 控制台中,从导航窗格中选择 Tables(表)。
-
在 Tables(表)页面上,选择 Add table(添加表)。
-
在 Set table properties(设置表属性)页面上,输入以下信息。
-
Name(名称)– 输入表的唯一名称。
-
Database(数据库)– 选择您为 GCS 连接器创建的 AWS Glue 数据库。
-
Include path(包含路径)– 对于 Data store(数据存储)部分中的 Include path(包含路径),输入前缀为
gs://
的 GCS URI 位置(例如gs://
)。如果您有一个或多个分区文件夹,请不要将其包含在路径中。gcs_table
/data
/注意
当您输入非
s3://
表路径时,AWS Glue 控制台会显示错误。您可以忽略该错误。该表将会成功创建。 -
Data format(数据格式)–对于 Classification(分类),选择 CSV 或 Parquet。
-
-
选择下一步。
-
在 Choose or define schema(选择或定义 Schema)页面上,强烈建议定义表 Schema,但这不是强制性的。如果您未定义 Schema,GCS 连接器会尝试为您推断 Schema。
请执行以下操作之一:
-
如果您希望 GCS 连接器尝试为您推断 Schema,请选择 Next(下一步),然后选择 Create(创建)。
-
要自己定义 Schema,请执行下一部分中的步骤。
-
在 AWS Glue 中定义表 Schema
在 AWS Glue 中定义表 Schema 需要更多步骤,但可以更好地控制表创建过程。
在 AWS Glue 中定义表 Schema
-
在 Choose or define schema(选择或定义 Schema)页面上,选择 Add(添加)。
-
在 Add schema entry(添加 Schema 条目)对话框中提供列名称和数据类型。
-
要将该列指定为分区列,请选中 Set as partition key(设为分区键)选项。
-
选择 Save(保存)以保存更改。
-
选择 Add(添加)以添加其他列。
-
添加完列后,选择 Next(下一步)。
-
在 Review and create(检查并创建)页面上检查表,然后选择 Create(创建)。
-
如果您的 Schema 包含分区信息,请按照下一部分中的步骤,在 AWS Glue 中为表的属性添加分区模式。
在 AWS Glue 中将分区模式添加到表属性
如果您的 GCS 存储桶有分区,则必须在 AWS Glue 中将分区模式添加到表属性中。
在 AWS Glue 中将分区信息添加到表属性
-
在您在 AWS Glue 中创建的表格的详细信息页面上,选择 Actions(操作),然后选择 Edit table(编辑表)。
-
在 Edit table(编辑表)页面上,向下滚动到 Table properties(表属性)部分。
-
选择 Add(添加)以添加分区键。
-
对于键,输入
partition.pattern
。此键将会定义文件夹路径模式。 -
对于 Value(值),输入文件夹路径模式(例如
StateName=${statename}/ZipCode=${zipcode}/
),其中用${}
括起来的statename
和zipcode
是分区列名称。GCS 连接器支持 Hive 和非 Hive 分区 Schema。 -
完成后,选择 Save。
-
要查看刚才创建的表属性,请选择 Advanced properties(高级属性)选项卡。
然后,您可以导航到 Athena 控制台。您可以在 Athena 中查询您在 AWS Glue 中创建的数据库和表。
数据类型支持
下表显示了支持的 CSV 和 Parquet 数据类型。
CSV
数据性质 | 推断的数据类型 |
---|---|
数据看起来像一个数字 | BIGINT |
数据看起来像一个字符串 | VARCHAR |
数据看起来像一个浮点数(浮点、双精度或十进制) | DOUBLE |
数据看起来像一个日期 | Timestamp |
数据包含 true/false 值 | BOOL |
Parquet
PARQUET | Athena(箭头) |
---|---|
BINARY | VARCHAR |
BOOLEAN | BOOL |
DOUBLE | DOUBLE |
ENUM | VARCHAR |
FIXED_LEN_BYTE_ARRAY | DECIMAL |
FLOAT | FLOAT(32 位) |
INT32 |
|
INT64 |
|
INT96 | Timestamp |
MAP | MAP |
STRUCT | STRUCT |
LIST | LIST |
所需权限
有关此连接器所需 IAM policy 的完整详细信息,请查看 athena-gcs.yamlPolicies
部分。以下列表汇总了所需的权限。
-
Amazon S3 写入权限 – 连接器需要对 Amazon S3 中的位置具有写入权限,以溢出大型查询的结果。
-
Athena GetQueryExecution – 当上游 Athena 查询终止时,该连接器将使用此权限快速失败。
-
AWS Glue Data Catalog – GCS 连接器需要 AWS Glue Data Catalog 的只读访问权限,以获取 Schema 信息。
-
CloudWatch Logs – 该连接器需要针对 CloudWatch Logs 的访问权限,以存储日志。
性能
当表 Schema 包含分区字段并且 partition.pattern
表属性配置正确时,可以在查询的 WHERE
子句中包含该分区字段。对于此类查询,GCS 连接器使用分区列来优化 GCS 文件夹路径,避免扫描 GCS 文件夹中不需要的文件。
对于 Parquet 数据集,选择列的子集可减少要扫描的数据量。这通常可在应用列投影时缩短查询执行时间。
CSV 数据集不支持列投影,并且不会减少扫描的数据量。
LIMIT
子句可减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT
子句的 SELECT
查询,扫描至少 16MB 的数据。无论是否应用 LIMIT
子句,GCS 连接器为较大数据集扫描的数据量都高于较小的数据集。例如,查询 SELECT * LIMIT 10000
为较大基础数据集扫描的数据高于较小的基础数据集。
许可证信息
使用此连接器,即表示您确认包含第三方组件(这些组件的列表可在此连接器的 pom.xml
其他资源
有关此连接器的更多信息,请访问 GitHub.com 上的相应站点