Amazon Athena Timestream 连接器 - Amazon Athena

Amazon Athena Timestream 连接器

Amazon Athena Timestream 连接器使 Amazon Athena 能够与 Amazon Timestream 进行通信,从而使您的时间序列数据可以通过 Amazon Athena 访问。您可以选择使用 AWS Glue Data Catalog 作为元数据的补充来源。

Amazon Timestream 是一个快速、可扩展、完全托管式、专门构建的时间序列数据库,每天可轻松存储和分析数万亿个时间序列数据点。Timestream 通过根据用户定义的策略将最新数据保存在内存中,并将历史数据移动到成本优化的存储层,从而节省您在管理时间序列数据生命周期方面的时间和成本。

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

先决条件

参数

使用本节中的 Lambda 环境变量来配置 Timestream 连接器。

  • 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 生成密钥。禁用溢出加密可以提高性能,尤其是当您的溢出位置使用服务器端加密时。

  • glue_catalog –(可选)使用此选项指定跨账户 AWS Glue 目录。默认情况下,该连接器将尝试从其自己的 AWS Glue 账户中获取元数据。

在 AWS Glue 中设置数据库和表

您可以选择使用 AWS Glue Data Catalog 作为元数据的补充来源。要使 AWS Glue 表与 Timestream 配合使用,必须具备 AWS Glue 数据库和表,且它们的名称应与要提供补充元数据的 Timestream 数据库和表相匹配。

注意

为了获得最佳性能,数据库名称和表名称仅限使用小写。使用混合大小写会使连接器执行不区分大小写的搜索,这种搜索的计算密集度更高。

要配置 AWS Glue 表与 Timestream 配合使用,您必须在 AWS Glue 中设置其表属性。

将 AWS Glue 表用于补充元数据
  1. 在 AWS Glue 控制台中编辑表,添加以下表属性:

    • timestream-metadata-flag — 此属性向 Timestream 连接器指明该连接器可将该表用于补充元数据。只要表属性的列表中存在 timestream-metadata-flag 属性,您就可以为 timestream-metadata-flag 提供任何值。

    • _view_template — 使用 AWS Glue 作为补充元数据时,您可以使用此表属性并指定任何 Timestream SQL 作为视图。Athena Timestream 连接器使用来自视图的 SQL 和来自 Athena 的 SQL 来运行查询。如果您想使用 Athena 中不具备的 Timestream SQL 功能,这将非常有用。

  2. 请确保使用适合 AWS Glue 的数据类型,如本文档中所列。

数据类型

目前,Timestream 连接器仅支持 Timestream 中可用数据类型的子集,尤其是:标量值 varchardoubletimestamp

要查询 timeseries 数据类型,您必须在使用 Timestream CREATE_TIME_SERIES 函数的 AWS Glue 表属性中配置视图。您还需要为使用语法 ARRAY<STRUCT<time:timestamp,measure_value::double:double>> 作为任何时间序列列的类型的视图提供架构。务必将 double 替换为适合您表的标量类型。

下图显示了为设置时间序列视图而配置的 AWS Glue 表属性的示例。

在 AWS Glue 中配置表属性,以设置时间序列视图。

所需权限

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

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

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

  • AWS Glue Data Catalog — Timestream 连接器需要针对 AWS Glue Data Catalog 的只读访问权限,以获取架构信息。

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

  • Timestream 访问权限 — 用于运行 Timestream 查询。

Performance

建议您使用 LIMIT 子句将返回的数据(非扫描的数据)限制在 256 MB 以内,以确保交互式查询性能良好。

Athena Timestream 连接器执行谓词下推,以减少查询扫描的数据。LIMIT 子句可减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT 子句的 SELECT 查询,来扫描至少 16MB 的数据。选择列的子集可以显著减少查询运行时及扫描的数据。Timestream 连接器能够灵活地应对并发造成的节流。

传递查询

Timestream 连接器支持传递查询。传递查询使用表函数将完整查询下推到数据来源来执行查询。

要在 Timestream 中执行传递查询,可以使用以下语法:

SELECT * FROM TABLE( system.query( query => 'query string' ))

以下示例查询将查询下推到 Timestream 中的数据来源。该查询选择了 customer 表中的所有列,将结果限制为 10。

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))

许可证信息

Amazon Athena Timestream 连接器项目已根据 Apache-2.0 许可证获得许可。

其他 资源

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