View a markdown version of this page

Amazon Athena Redis OSS 連接器 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Athena Redis OSS 連接器

Amazon Athena Redis OSS 連接器讓 Amazon Athena 能夠與您的 Redis OSS 執行個體通訊,以便使用 SQL 來查詢您的 Redis OSS 資料。您可以使用 AWS Glue Data Catalog 將 Redis OSS 金鑰/值對映射至虛擬資料表。

與傳統的關聯式資料存放區不同,Redis OSS 沒有資料表或資料欄概念。相反,Redis OSS 提供索引鍵/值存取模式,其中索引鍵本質上是一個 string,而值是 stringz-sethmap

您可以使用 AWS Glue Data Catalog 來建立結構描述和設定虛擬資料表。特殊資料表屬性會告知 Athena Redis OSS 連接器如何將 Redis OSS 索引鍵和值映射到資料表中。如需詳細資訊,請參閱本文件稍後的在 中設定資料庫和資料表 AWS Glue

此連接器不會使用 Glue 連線來集中 Glue 中的組態屬性。連線組態是透過 Lambda 完成的。

如果您的 帳戶中已啟用 Lake Formation,則您在 中部署的 Athena 聯合 Lambda 連接器的 IAM 角色 AWS Serverless Application Repository 必須在 Lake Formation 中具有對 的讀取存取權 AWS Glue Data Catalog。

Amazon Athena Redis OSS 連接器支援 Amazon MemoryDB 和 Amazon ElastiCache (Redis OSS)。

先決條件

Parameters

使用本節中的參數來設定 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 - (選用) 依預設,任何溢出到 Amazon S3 的資料都會使用 AES-GCM 驗證加密模式和隨機產生的金鑰進行加密。為了讓您的 Lambda 函數使用 KMS 產生的更強大的加密金鑰,例如 a7e63k4b-8loc-40db-a2a1-4d0en2cd8331,您可以指定 KMS 金鑰 ID。

  • disable_spill_encryption - (選用) 當設定為 True 時,停用溢出加密。預設為 False,因此溢出 S3 的資料會使用 AES-GCM 進行加密 — 使用隨機產生的金鑰或 KMS 來產生金鑰。停用溢出加密可以提高效能,尤其是如果溢出位置使用伺服器端加密

  • glue_catalog - (選用) 使用此選項可指定跨帳戶 AWS Glue 目錄。根據預設,連接器會嘗試從自己的 AWS Glue 帳戶取得中繼資料。

在 中設定資料庫和資料表 AWS Glue

若要啟用 AWS Glue 資料表以搭配 Redis OSS 使用,您可以在 資料表上設定下列資料表屬性:redis-value-typeredis-endpointredis-keys-zsetredis-key-prefix

此外,包含 Redis OSS 資料表的任何 AWS Glue 資料庫都必須在資料庫的 URI 屬性redis-db-flag中具有 。若要設定 redis-db-flag URI 屬性,請使用 AWS Glue 主控台編輯資料庫。

以下清單說明資料表屬性。

  • redis-endpoint – (必要) Redis OSS 伺服器的 hostname:port:password,其中包含此資料表的資料 (例如 athena-federation-demo.cache.amazonaws.com:6379) 或者,您可以使用 AWS Secrets Manager ${Secret_Name} 作為資料表屬性值,在 中存放端點或部分端點。

注意

若要搭配 使用 Athena 聯合查詢功能 AWS 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 中的資料庫 AWS Glue,也不是指 Redis 邏輯資料庫。如需詳細資訊,請參閱 Redis 文件中的 SELECT 索引

資料類型

Redis OSS 連接器支援下列資料類型。不支援 Redis OSS 串流。

所有 Redis OSS 值被擷取為 string 資料類型。然後根據在 AWS Glue Data Catalog中定義資料表的方式,將它們轉換為以下 Apache Arrow 資料類型之一。

AWS Glue 資料類型 Apache Arrow 資料類型
int INT
string VARCHAR
bigint BIGINT
double FLOAT8
float FLOAT4
smallint SMALLINT
tinyint TINYINT
boolean BIT
binary VARBINARY

所需的許可

如需詳細了解此連接器所需的 IAM 政策,請檢閱 athena-redis.yaml 檔案的 Policies 部分。以下清單摘要說明所需的許可。

  • Amazon S3 寫入存取 - 連接器需要 Amazon S3 中某個位置的寫入存取權,以便從大型查詢中溢寫結果。

  • Athena GetQueryExecution - 當上游 Athena 查詢終止時,連接器會使用此許可快速失敗。

  • AWS Glue Data Catalog – Redis 連接器需要對 的唯讀存取權 AWS Glue Data Catalog ,才能取得結構描述資訊。

  • CloudWatch Logs - 連接器需要存取 CloudWatch Logs 以儲存日誌。

  • AWS Secrets Manager 讀取存取 – 如果您選擇將 Redis 端點詳細資訊存放在 Secrets Manager 中,則必須授予連接器存取這些秘密的權限。

  • 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 License 來授權的。

其他資源

如需此連接器的其他資訊,請造訪 GitHub.com 上的相應網站