Amazon Athena Redis OSS 連接器 - Amazon Athena

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

Amazon Athena Redis OSS 連接器

Amazon Athena Redis OSS 連接器可讓 Amazon Athena 與您的 Redis OSS執行個體通訊,以便您可以使用 查詢 Redis OSS資料SQL。您可以使用 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 Connections 集中 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。

必要條件

參數

使用本節中的參數來設定 Redis 連接器。

  • spill_bucket - 針對超過 Lambda 函數限制的資料,指定 Amazon S3 儲存貯體。

  • spill_prefix - (選用) 預設為指定的 spill_bucket 中名為 athena-federation-spill 的子資料夾。我們建議您在此位置設定 Amazon S3 儲存生命週期,以刪除超過預定天數或小時數的溢出。

  • spill_put_request_headers – (選用) JSON 用於溢出之 Amazon S3 putObject請求的請求標頭和值編碼映射 (例如 {"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以便使用 AES- GCM來加密溢出到 S3 的資料,無論是使用隨機產生的金鑰,還是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 – (必要) hostname:port:password Redis OSS伺服器的 ,其中包含此資料表的資料 (例如 athena-federation-demo.cache.amazonaws.com:6379) 或者,您可以使用 AWS Secrets Manager ${Secret_Name} 做為資料表屬性值,在 中存放端點或部分端點。

注意

若要搭配 Athena 聯合查詢功能使用 AWS Secrets Manager,VPC連接至 Lambda 函數的 應具有網際網路存取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/ 的 Redis 連線TLS。預設值為 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 日誌 – 連接器需要存取 CloudWatch 日誌來存放日誌。

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

其他資源

如需此連接器的詳細資訊,請造訪對應的網站 on.com GitHub。