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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Athena Redis 连接器

Amazon Redis 连接器使 Amazon Athena 可以与 Redis 实例通信,以便您可以使用 SQL 查询 Redis 数据。您可以使用 Amazon Glue Data Catalog 将 Redis 键值对映射到虚拟表。

与传统的关系数据存储不同,Redis 没有表或列的概念。相反,Redis 提供了键值访问模式,其中,键本质上是一个 string,值是 stringz-sethmap

您可以使用 Amazon Glue Data Catalog 创建架构和配置虚拟表。特殊的表属性告诉 Athena Redis 连接器如何将 Redis 键和值映射到表中。有关更多信息,请参阅本文后面的在 Amazon Glue 中设置数据库和表

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

Amazon Athena Redis 连接器支持适用于 Redis 的 Amazon MemoryDB 和 Amazon ElastiCache for Redis。

先决条件

参数

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

  • 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 –(可选)使用此选项指定跨账户 Amazon Glue 目录。默认情况下,该连接器将尝试从其自己的 Amazon Glue 账户中获取元数据。

在 Amazon Glue 中设置数据库和表

要将 Amazon Glue 表与 Redis 配合使用,可以在表上设置以下表属性:redis-endpointredis-value-type,以及 redis-keys-zsetredis-key-prefix

此外,包含 Redis 表的任何 Amazon Glue 数据库必须在数据库的 URI 属性中有 redis-db-flag。要设置 redis-db-flag URI 属性,请使用 Amazon Glue 控制台编辑数据库。

以下列表描述了表属性。

  • redis-endpoint —(必选)包含此表数据的 Redis 服务器的主机名:端口:密码(例如 athena-federation-demo.cache.amazonaws.com:6379)。或者,您可以通过将 ${Secret_Name} 用作表属性值,来将端点或部分端点存储在 Amazon Secrets Manager。

注意

要将 Athena 联合查询功能与 Amazon Secrets Manager 配合使用,连接到您的 Lambda 函数的 VPC 应该拥有互联网访问权限或者 VPC 端点,以连接到 Secrets Manager。

  • redis-keys-zset —(必选,如果未使用 redis-key-prefix)以逗号分隔的密钥列表,值为 zset(例如 active-orders,pending-orders)。zset 中的每个值都被视为密钥(表的一部分)。必须设置 redis-keys-zset 属性或 redis-key-prefix 属性。

  • redis-key-prefix —(必选,如果未使用 redis-keys-zset)以逗号分隔的键前缀列表,用于扫描表中的值(例如 accounts-*,acct-)。必须设置 redis-key-prefix 属性或 redis-keys-zset 属性。

  • redis-value-type —(必选)定义由 redis-key-prefixredis-keys-zset 定义的键的值如何映射到您的表。文本映射到单个列。zset 也映射到单个列,但每个键可以存储许多行。哈希使每个键成为包含多个列的行(例如,哈希、文本或 zset)。

  • redis-ssl-flag —(可选)True 时,创建一个使用 SSL/TLS 的 Redis 连接。默认为 False

  • redis-cluster-flag —(可选)True 时,启用对集群 Redis 实例的支持。默认为 False

  • redis-db-number —(可选)仅适用于独立的非集群实例。) 将此数字(例如 1、2 或 3)设置为从非默认 Redis 数据库读取。默认为 Redis 逻辑数据库 0。此数字不是指 Athena 或 Amazon Glue 中的数据库,而是指 Redis 逻辑数据库。有关更多信息,请参阅 Redis 文档中的 SELECT 索引

数据类型

Redis 连接器支持以下数据类型。不支持 Redis 流。

所有 Redis 值均作为 string 数据类型检索。然后,根据您的表在 Amazon Glue Data Catalog 中的定义方式,将这些值转换为以下 Apache Arrow 数据类型之一。

Amazon Glue 数据类型 Apache Arrow 数据类型
int INT
字符串 VARCHAR
bigint BIGINT
double FLOAT8
float FLOAT4
smallint SMALLINT
tinyint TINYINT
布尔值 BIT
binary VARBINARY

所需权限

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

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

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

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

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

  • Amazon Secrets Manager读取访问权限 — 如果您选择在 Secrets Manager 中存储 Redis 端点详细信息,则必须授予连接器访问这些密钥的权限。

  • VPC 访问 — 连接器需要能够连接和分离您 VPC 的接口,以便连接到 VPC 并与您的 Redis 实例通信。

性能

Athena Redis 连接器尝试根据您定义的表类型(例如,zset 密钥或前缀密钥)针对您的 Redis 实例并行查询。

Athena Redis 连接器可执行谓词下推,以减少查询扫描的数据量。但是,包含谓词的主键结果查询会超时失败。LIMIT 子句会减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT 子句的 SELECT 查询,来扫描至少 16 MB 的数据。Redis 连接器能够灵活地应对并发造成的节流。

许可证信息

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

另请参阅

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