Amazon Redis OSS 连接器使 Amazon Athena 可以与 Redis OSS 实例通信,以便您可以使用 SQL 查询 Redis OSS 数据。您可以使用 AWS Glue Data Catalog 将 Redis OSS 键值对映射到虚拟表。
与传统的关系数据存储不同,Redis OSS 没有表或列的概念。相反,Redis OSS 提供了键值访问模式,其中,键本质上是一个 string
,值是 string
、z-set
或 hmap
。
您可以使用 AWS Glue Data Catalog 创建架构和配置虚拟表。特殊的表属性告诉 Athena Redis OSS 连接器如何将 Redis OSS 键和值映射到表中。有关更多信息,请参阅本文后面的在 AWS Glue 中设置数据库和表。
此连接器不使用 Glue 连接将配置属性集中保存到 Glue 中。连接配置通过 Lambda 完成。
如果您在账户中启用了 Lake Formation,则您在 AWS Serverless Application Repository 中部署的 Athena 联合身份 Lambda 连接器的 IAM 角色必须在 Lake Formation 中具有 AWS Glue Data Catalog 的读取权限。
Amazon Athena Redis OSS 连接器支持 Amazon MemoryDB 和 Amazon ElastiCache(Redis OSS)。
先决条件
可以使用 Athena 控制台或 AWS Serverless Application Repository 将该连接器部署到您的 AWS 账户。有关更多信息,请参阅创建数据来源连接或使用 AWS Serverless Application Repository 部署数据来源连接器。
使用此连接器前,请先设置 VPC 和安全组。有关更多信息,请参阅 为数据来源连接器或 AWS Glue 连接创建 VPC。
参数
使用本节中的参数来配置 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 –(可选)使用此选项指定跨账户 AWS Glue 目录。默认情况下,该连接器将尝试从其自己的 AWS Glue 账户中获取元数据。
在 AWS Glue 中设置数据库和表
要将 AWS Glue 表与 Redis OSS 配合使用,可以在表上设置以下表属性:redis-endpoint
、redis-value-type
,以及 redis-keys-zset
或 redis-key-prefix
。
此外,包含 Redis OSS 表的任何 AWS Glue 数据库必须在数据库的 URI 属性中有 redis-db-flag
。要设置 redis-db-flag
URI 属性,请使用 AWS Glue 控制台编辑数据库。
以下列表描述了表属性。
-
redis-endpoint:(必选)包含此表数据的 Redis OSS 服务器的
主机名
:
端口
:
密码
(例如athena-federation-demo.cache.amazonaws.com:6379
)。或者,您可以通过将 ${Secret_Name
} 用作表属性值,来将端点或部分端点存储在 AWS 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-prefix
或redis-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 或 AWS Glue 中的数据库,而是指 Redis 逻辑数据库。有关更多信息,请参阅 Redis 文档中的 SELECT 索引
。
数据类型
Redis OSS 连接器支持以下数据类型。不支持 Redis OSS 流。
所有 Redis OSS 值均作为 string
数据类型检索。然后,根据您的表在 AWS Glue Data Catalog 中的定义方式,将这些值转换为以下 Apache Arrow 数据类型之一。
AWS Glue 数据类型 | Apache Arrow 数据类型 |
---|---|
int | INT |
字符串 | VARCHAR |
bigint | BIGINT |
double | FLOAT8 |
float | FLOAT4 |
smallint | SMALLINT |
tinyint | TINYINT |
布尔值 | BIT |
binary | VARBINARY |
所需权限
有关此连接器所需 IAM policy 的完整详细信息,请查看 athena-redis.yamlPolicies
部分。以下列表汇总了所需的权限。
-
Amazon S3 写入权限 – 连接器需要对 Amazon S3 中的位置具有写入权限,以溢出大型查询的结果。
-
Athena GetQueryExecution – 当上游 Athena 查询终止时,该连接器将使用此权限快速失败。
-
AWS Glue Data Catalog — Redis 连接器需要针对 AWS Glue Data Catalog 的只读访问权限,以获取架构信息。
-
CloudWatch Logs – 该连接器需要针对 CloudWatch Logs 的访问权限,以存储日志。
-
AWS Secrets Manager读取访问权限 — 如果您选择在 Secrets Manager 中存储 Redis 端点详细信息,则必须授予连接器访问这些密钥的权限。
-
VPC 访问 — 连接器需要能够连接和分离您 VPC 的接口,以便连接到 VPC 并与您的 Redis 实例通信。
性能
Athena Redis OSS 连接器尝试根据您定义的表类型(例如,zset 密钥或前缀密钥)针对您的 Redis OSS 实例并行查询。
Athena Redis 连接器可执行谓词下推,以减少查询扫描的数据量。但是,包含谓词的主键结果查询会超时失败。LIMIT
子句会减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT
子句的 SELECT
查询,来扫描至少 16 MB 的数据。Redis 连接器能够灵活地应对并发造成的节流。
传递查询
Redis 连接器支持传递查询。可以使用此功能在 Redis 数据库上运行使用 Lua 脚本的查询。
要使用 Redis 创建传递查询,请使用以下语法:
SELECT * FROM TABLE(
system.script(
script => 'return redis.[call|pcall](query_script
)',
keys => '[key_pattern
]',
argv => '[script_arguments
]'
))
以下示例运行 Lua 脚本来获取键 l:a
处的值。
SELECT * FROM TABLE(
system.script(
script => 'return redis.call("GET", KEYS[1])',
keys => '[l:a]',
argv => '[]'
))
许可证信息
Amazon Athena Redis 连接器项目已根据 Apache-2.0 许可证
其他资源
有关此连接器的更多信息,请访问 GitHub.com 上的相应站点