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

Amazon Athena Google Cloud Storage 连接器

借助 Amazon Athena Google Cloud Storage 连接器,Amazon Athena 可以对存储在 Google Cloud Storage(GCS)存储桶中的 Parquet 和 CSV 文件运行查询。将一个或多个 Parquet 或 CSV 文件分组到 GCS 存储桶中的未分区或已分区文件夹中后,即可以在 Amazon Glue 数据库表中进行组织。

如果您在账户中启用了 Lake Formation,则您在 Amazon Serverless Application Repository 中部署的 Athena 联合身份 Lambda 连接器的 IAM 角色必须在 Lake Formation 中具有 Amazon Glue Data Catalog 的读取权限。

先决条件

限制

  • 不支持写入 DDL 操作。

  • 任何相关的 Lambda 限制。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Lambda 配额

  • 目前,此连接器仅支持分区列的 VARCHAR 类型(Amazon Glue 表 Schema 中的 stringvarchar)。当您在 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 - Amazon Secrets Manager 中的密钥名称,包含 JSON 格式的 GCS 凭证(例如 GoogleCloudPlatformCredentials)。

在 Amazon Glue 中设置数据库和表

由于 GCS 连接器的内置 Schema 推理能力有限,因此我们建议您使用 Amazon Glue 来处理元数据。下面的过程演示了如何在 Amazon Glue 中创建您可以从 Athena 访问的数据库和表。

在 Amazon Glue 中创建数据库

您可以通过 Amazon Glue 控制台创建可以与 GCS 连接器一起使用的数据库。

在 Amazon Glue 创建数据库
  1. 登录 Amazon Web Services Management Console,然后打开 Amazon Glue 控制台,网址为:https://console.aws.amazon.com/glue/

  2. 从导航窗格中选择 Databases(数据库)。

  3. 选择 Add database(添加数据库)。

  4. 对于 Name(名称),输入您要用于 GCS 连接器的数据库名称。

  5. 对于 Location(位置),指定 s3://google-cloud-storage-flag.。此位置将告诉 GCS 连接器 Amazon Glue 数据库包含要在 Athena 中查询的 GCS 数据的表。此连接器会识别 Athena 中具有此标志的数据库,并且会忽略没有此标志的数据库。

  6. 选择创建数据库

在 Amazon Glue 中创建表

现在您可以为该数据库创建一个表。创建用于 GCS 连接器的 Amazon Glue 表时,您必须指定额外的元数据。

在 Amazon Glue 控制台中创建表
  1. 在 Amazon Glue 控制台中,从导航窗格中选择 Tables(表)。

  2. Tables(表)页面上,选择 Add table(添加表)。

  3. Set table properties(设置表属性)页面上,输入以下信息。

    • Name(名称)– 输入表的唯一名称。

    • Database(数据库)– 选择您为 GCS 连接器创建的 Amazon Glue 数据库。

    • Include path(包含路径)– 对于 Data store(数据存储)部分中的 Include path(包含路径),输入前缀为 gs:// 的 GCS URI 位置(例如 gs://gcs_table/data/)。如果您有一个或多个分区文件夹,请不要将其包含在路径中。

      注意

      当您输入非 s3:// 表路径时,Amazon Glue 控制台会显示错误。您可以忽略该错误。该表将会成功创建。

    • Data format(数据格式)–对于 Classification(分类),选择 CSVParquet

  4. 选择下一步

  5. Choose or define schema(选择或定义 Schema)页面上,强烈建议定义表 Schema,但这不是强制性的。如果您未定义 Schema,GCS 连接器会尝试为您推断 Schema。

    请执行以下操作之一:

    • 如果您希望 GCS 连接器尝试为您推断 Schema,请选择 Next(下一步),然后选择 Create(创建)。

    • 要自己定义 Schema,请执行下一部分中的步骤。

在 Amazon Glue 中定义表 Schema

在 Amazon Glue 中定义表 Schema 需要更多步骤,但可以更好地控制表创建过程。

在 Amazon Glue 中定义表 Schema
  1. Choose or define schema(选择或定义 Schema)页面上,选择 Add(添加)。

  2. Add schema entry(添加 Schema 条目)对话框中提供列名称和数据类型。

  3. 要将该列指定为分区列,请选中 Set as partition key(设为分区键)选项。

  4. 选择 Save(保存)以保存更改。

  5. 选择 Add(添加)以添加其他列。

  6. 添加完列后,选择 Next(下一步)。

  7. Review and create(检查并创建)页面上检查表,然后选择 Create(创建)。

  8. 如果您的 Schema 包含分区信息,请按照下一部分中的步骤,在 Amazon Glue 中为表的属性添加分区模式。

在 Amazon Glue 中将分区模式添加到表属性

如果您的 GCS 存储桶有分区,则必须在 Amazon Glue 中将分区模式添加到表属性中。

在 Amazon Glue 中将分区信息添加到表属性
  1. 在您在 Amazon Glue 中创建的表格的详细信息页面上,选择 Actions(操作),然后选择 Edit table(编辑表)。

  2. Edit table(编辑表)页面上,向下滚动到 Table properties(表属性)部分。

  3. 选择 Add(添加)以添加分区键。

  4. 对于,输入 partition.pattern。此键将会定义文件夹路径模式。

  5. 对于 Value(值),输入文件夹路径模式(例如 StateName=${statename}/ZipCode=${zipcode}/),其中用 ${} 括起来的 statenamezipcode 是分区列名称。GCS 连接器支持 Hive 和非 Hive 分区 Schema。

  6. 完成后,选择 Save

  7. 要查看刚才创建的表属性,请选择 Advanced properties(高级属性)选项卡。

然后,您可以导航到 Athena 控制台。您可以在 Athena 中查询您在 Amazon 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
  1. INT32

  2. DATEDAY(当 Parquet 列的逻辑类型为 DATE 时)

INT64
  1. INT64

  2. TIMESTAMP(当 Parquet 列的逻辑类型为 TIMESTAMP 时)

INT96 Timestamp
MAP MAP
STRUCT STRUCT
LIST LIST

所需权限

有关此连接器所需 IAM policy 的完整详细信息,请查看 athena-gcs.yaml 文件的 Policies 部分。以下列表汇总了所需的权限。

  • Amazon S3 写入权限 – 连接器需要对 Amazon S3 中的位置具有写入权限,以溢出大型查询的结果。

  • Athena GetQueryExecution – 当上游 Athena 查询终止时,该连接器将使用此权限快速失败。

  • Amazon Glue Data Catalog – GCS 连接器需要 Amazon Glue Data Catalog 的只读访问权限,以获取 Schema 信息。

  • CloudWatch Logs – 该连接器需要针对 CloudWatch Logs 的访问权限,以存储日志。

Performance

当表 Schema 包含分区字段并且 partition.pattern 表属性配置正确时,可以在查询的 WHERE 子句中包含该分区字段。对于此类查询,GCS 连接器使用分区列来优化 GCS 文件夹路径,避免扫描 GCS 文件夹中不需要的文件。

对于 Parquet 数据集,选择列的子集可减少要扫描的数据量。这通常可在应用列投影时缩短查询执行时间。

CSV 数据集不支持列投影,并且不会减少扫描的数据量。

LIMIT 子句可减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT 子句的 SELECT 查询,扫描至少 16MB 的数据。无论是否应用 LIMIT 子句,GCS 连接器为较大数据集扫描的数据量都高于较小的数据集。例如,查询 SELECT * LIMIT 10000 为较大基础数据集扫描的数据高于较小的基础数据集。

许可证信息

使用此连接器,即表示您确认包含第三方组件(这些组件的列表可在此连接器的 pom.xml 文件中找到),并同意 GitHub.com 上的 LICENSE.txt 文件中提供的相应第三方许可证中的条款。

另请参阅

有关此连接器的更多信息,请访问 GitHub.com 上的相应站点