Amazon Athena DocumentDB 連接器 - Amazon Athena

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

Amazon Athena DocumentDB 連接器

Amazon Athena DocumentDB 連接器讓 Athena 能夠與您的 DocumentDB 執行個體通訊,以便使用 SQL 來查詢您的 DocumentDB 資料。此連接器也適用於 MongoDB 相容的任何端點。

與傳統的關聯式資料存放區不同,Amazon DocumentDB 集合沒有集結構描述。DocumentDB 沒有中繼資料存放區。DocumentDB 集合中的每個項目可以有不同的欄位和資料類型。

DocumentDB 連接器支援兩種產生資料表結構描述資訊的機制:基本結構描述推論和 AWS Glue Data Catalog 中繼資料。

結構描述推斷是預設值。此選項會掃描集合中的少量文件,形成所有欄位的聯集,並指定具有非重疊資料類型的欄位。此選項適用於大多數具有統一條目的集合。

對於具有更多資料類型的集合,連接器支援從 AWS Glue Data Catalog中擷取中繼資料。如果連接器看到符合您 DocumentDB AWS Glue 資料庫和集合名稱的資料庫和資料表,則會從對應的 AWS Glue 資料表取得其結構描述資訊。當您建立 AWS Glue 資料表時,建議您將其設定為您可能想要從 DocumentDB 集合存取的所有欄位的超級集合。

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

此連接器無法向 Glue Data Catalog 註冊為聯合型目錄。此連接器不支援 Lake Formation 中在目錄、資料庫、資料表、資料欄、資料列和標籤層級定義的資料存取控制。此連接器使用 Glue Connections 來集中 Glue 中的組態屬性。

先決條件

參數

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

注意

Athena 資料來源連接器於 2024 年 12 月 3 日及之後建立,使用 AWS Glue 連線。

下列參數名稱和定義適用於 2024 年 12 月 3 日之前建立的 Athena 資料來源連接器。這些可能與其對應的AWS Glue 連線屬性不同。自 2024 年 12 月 3 日起,只有在您手動部署舊版 Athena 資料來源連接器時,才能使用下列參數。

  • 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 來產生金鑰。停用溢出加密可以提高效能,尤其是如果溢出位置使用伺服器端加密

  • disable_glue – (選用) 如果存在並設為 true,連接器不會嘗試從中擷取補充中繼資料 AWS Glue。

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

  • default_docdb - 如果存在,請指定當不存在目錄特定環境變數時要使用的 DocumentDB 連接字串。

  • disable_projection_and_casing - (選用) 停用投影和大小寫。如果想要查詢使用區分大小寫資料欄名稱的 Amazon DocumentDB 資料表,請使用此選項。disable_projection_and_casing 參數使用下列值來指定大小寫和資料欄映射的行為:

    • false – 這是預設設定。投影已啟用,連接器預期所有資料欄名稱都為小寫字母。

    • true – 停用投影和大小寫。使用 disable_projection_and_casing 參數時,請謹記以下幾點:

      • 使用該參數可能會導致更高的頻寬用量。此外,如果您的 Lambda 函數與資料來源位於不同的 AWS 區域 ,則將因為頻寬用量增加而產生較高的標準 AWS 跨區域傳輸成本。如需跨區域傳輸成本的詳細資訊,請參閱 AWS Partner Network 部落格中的AWS 伺服器和無伺服器架構的資料傳輸費用

      • 由於傳輸的位元組數目較多,而且位元組數目越多,需要越長的還原序列化時間,因此整體延遲可能會增加。

  • enable_case_insensitive_match – (選用) 當 時true, 針對 Amazon DocumentDB 中的結構描述和資料表名稱執行不區分大小寫的搜尋。預設值為 false。如果您的查詢包含大寫結構描述或資料表名稱,請使用 。

指定連接字串

您可以提供一個或多個屬性,以定義與連接器搭配使用的 DocumentDB 執行個體的 DocumentDB 連接詳細資訊。因此,請設定您要在 Athena 使用的目錄名稱所對應的 Lambda 環境變數。例如,假設您想要使用下列查詢來查詢來自 Athena 的兩個不同 DocumentDB 執行個體:

SELECT * FROM "docdb_instance_1".database.table
SELECT * FROM "docdb_instance_2".database.table

您必須先將兩個環境變數 docdb_instance_1docdb_instance_2 新增至 Lambda 函數,才能使用這兩個 SQL 陳述式。每個陳述式的值應該為以下格式的 DocumentDB 連接字串:

mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0

使用秘密

您可以選擇性地將 AWS Secrets Manager 用於連線字串詳細資訊的部分或全部值。若要搭配使用 Athena 聯合查詢功能和 Secrets Manager,連接到您的 Lambda 函數的 VPC 應該具有網際網路存取權VPC 端點,以連接到 Secrets Manager。

如果您使用語法 ${my_secret} 將 Secrets Manager 秘密的名稱放入連接字串中,連接器會以 Secret Manager 中的相應純文字值來取代 ${my_secret}。秘密應儲存為具有值 <username>:<password> 的純文字秘密。儲存為 {username:<username>,password:<password>} 的秘密將不會正確地傳遞給連接字串。

秘密也可以完整地用於整個連接字串,並且可以在秘密中定義使用者名稱和密碼。

例如,假設您將 docdb_instance_1 的 Lambda 環境變數設定為以下值:

mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0

Athena Query Federation 軟體開發套件會自動嘗試從 Secrets Manager 中擷取名為 docdb_instance_1_creds 的秘密,並將該值放入 ${docdb_instance_1_creds} 位置。由 ${ } 字元組合括住的連接字串的任何部分會被解譯為 Secrets Manager 的秘密。如果您指定連接器在 Secrets Manager 中找不到的秘密名稱,則連接器不會取代該文字。

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

由於連接器的內建結構描述推論功能會掃描有限數量的文件,並僅支援一部分資料類型,因此您可能想要改為使用 AWS Glue 做為中繼資料。

若要啟用 AWS Glue 資料表以與 Amazon DocumentDB 搭配使用,您必須擁有要為其提供補充中繼資料的 DocumentDB 資料庫和集合的資料庫和 AWS Glue 資料表。

使用 AWS Glue 資料表補充中繼資料
  1. 使用 AWS Glue 主控台建立與 Amazon DocumentDB AWS Glue 資料庫名稱具有相同名稱的資料庫。

  2. 將資料庫的 URI 屬性設定為包含 docdb-metadata-flag

  3. (選用) 新增 sourceTable 資料表屬性。此屬性定義 Amazon DocumentDB 中的來源資料表名稱。如果您的 AWS Glue 資料表名稱與 Amazon DocumentDB 中的資料表名稱不同,請使用此屬性。 AWS Glue 與 Amazon DocumentDB 之間命名規則的差異,可能會使此成為必要。例如, AWS Glue 資料表名稱中不允許大寫字母,但 Amazon DocumentDB 資料表名稱中允許大寫字母。

  4. (選用) 新增 columnMapping 資料表屬性。此屬性可定義資料欄名稱映射。如果 AWS Glue 資料欄命名規則阻止您建立的資料欄名稱與 Amazon DocumentDB AWS Glue 資料表中的資料欄名稱相同,請使用此屬性。這非常有用,因為 Amazon DocumentDB 資料欄名稱中允許大寫字母,但 AWS Glue 資料欄名稱中不允許。

    columnMapping 屬性值應該是格式 col1=Col1,col2=Col2 中的一組映射。

    注意

    資料欄映射僅適用於頂層資料欄名稱,而不適用於巢狀欄位。

    新增 AWS Glue columnMapping資料表屬性後,您可以移除 disable_projection_and_casing Lambda 環境變數。

  5. 請確定您使用適用於 的資料類型, AWS Glue 如本文件所列。

支援的資料類型

本節列出 DocumentDB 連接器用於結構描述推論的資料類型,以及使用 AWS Glue 中繼資料時的資料類型。

結構描述推斷資料類型

DocumentDB 連接器的結構描述推斷功能會嘗試將值推斷為以下資料類型之一。該資料表顯示 Amazon DocumentDB、Java 和 Apache Arrow 的相應資料類型。

Apache Arrow Java 或 DocDB
VARCHAR 字串
INT Integer
BIGINT Long
BIT Boolean
FLOAT4 Float
FLOAT8 Double
TIMESTAMPSEC 日期
VARCHAR ObjectId
LIST 清單
STRUCT 文件

AWS Glue 資料類型

如果您使用 AWS Glue 補充中繼資料,則可以設定下列資料類型。資料表顯示 AWS Glue 和 Apache Arrow 的對應資料類型。

AWS Glue Apache Arrow
int INT
bigint BIGINT
double FLOAT8
float FLOAT4
boolean BIT
binary VARBINARY
string VARCHAR
清單 LIST
Struct STRUCT

所需的許可

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

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

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

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

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

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

  • VPC 存取 - 連接器需要能夠將介面連接到 VPC 並能進行分離,以便可進行連接並與 DocumentDB 執行個體通訊。

效能

Athena Amazon DocumentDB 連接器目前不支援平行掃描,但會嘗試下推述詞作為其 DocumentDB 查詢的一部分,而針對 DocumentDB 集合上之索引的述詞會導致掃描的資料大幅減少。

Lambda 函數執行投影下推,以減少查詢掃描的資料。不過,選取資料欄子集有時會導致較長的查詢執行時間。LIMIT 子句可減少掃描的資料量,但是如果您未提供述詞,則應期望具有 LIMIT 子句的 SELECT 查詢掃描至少 16MB 的資料。

傳遞查詢

Athena Amazon DocumentDB 連接器支援傳遞查詢,且以 NoSQL 為基礎。如需有關查詢 Amazon DocumentDB 的資訊,請參閱《Amazon DocumentDB 開發人員指南》中的查詢

若要搭配 Amazon DocumentDB 使用傳遞查詢,請使用下列語法:

SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))

下列範例會查詢TPCDS集合中的example資料庫,篩選標題為權利法案的所有書籍。

SELECT * FROM TABLE( system.query( database => 'example', collection => 'tpcds', filter => '{title: "Bill of Rights"}' ))

其他資源