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,則您在 AWS Serverless Application Repository 中部署的 Athena 聯合 Lambda 連接器的 IAM 角色在 Lake Formation 中必須具有 AWS Glue Data Catalog 的讀取存取權。
此連接器可以作為聯合目錄向 Glue Data Catalog 註冊。它可在目錄、資料庫、資料表、資料欄、資料列和標籤層級支援 Lake Formation 中定義的資料存取控制。此連接器使用 Glue 連線來集中 Glue 中的組態屬性。
必要條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶。如需詳細資訊,請參閱 建立資料來源連線 或 使用 AWS Serverless Application Repository 部署資料來源連接器 。
參數
使用本節中的參數來設定 DocumentDB 連接器。
注意
2024 年 12 月 3 日及之後建立的 Athena 資料來源連接器使用 AWS Glue 連線。
下方列出的參數名稱和定義適用於 2024 年 12 月 3 日之前建立的 Athena 資料來源連接器。這些可能與其對應的 AWS Glue 連線屬性不同。從 2024 年 12 月 3 日開始,只有在您手動部署舊版 Athena 資料來源連接器時,才會使用下列參數。
我們建議您使用 Glue 連線物件來設定 DocumentDB 連接器。為此,請將 DocumentDB 連接器 Lambda 的 glue_connection 環境變數設定為要使用的 Glue 連線名稱。
Glue 連線屬性
使用下列命令來取得 Glue 連線物件的結構描述。此結構描述包含可用於控制連線的所有參數。
aws glue describe-connection-type --connection-type DOCUMENTDB
Lambda 環境屬性
-
glue_connection – 指定與聯合連接器關聯的 Glue 連線名稱。
注意
-
使用 Glue 連線的所有連接器都必須使用 AWS Secrets Manager 來存放憑證。
-
使用 Glue 連線建立的 DocumentDB 連接器不支援使用多工處理常式。
-
使用 Glue 連線建立的 DocumentDB 連接器僅支援
ConnectionSchemaVersion2。
-
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 合作夥伴網路部落格中的伺服器和無伺服器架構的 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_1 和 docdb_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 應該具有網際網路存取權
如果您使用語法 ${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 中找不到的秘密名稱,則連接器不會取代該文字。
擷取補充中繼資料
若要擷取補充中繼資料,請依照以下步驟,設定 Glue 資料庫和資料表。
設定 Glue 資料庫
-
建立與 DocumentDB 集合同名的 Glue 資料庫。
-
在位置 URI 欄位中,輸入
docdb-metadata-flag。
設定 Glue 資料表
將下列參數新增至您的 Glue 資料表:
-
docdb-metadata-flag = true -
columnMapping = apple=APPLE在此範例中,
apple表示 Glue 中的小寫資料欄名稱,而APPLE表示 DocumentDB 集合中實際的區分大小寫的資料欄名稱。
驗證中繼資料擷取
-
執行查詢。
-
檢查 Lambda 函式的 CloudWatch 日誌,以確認中繼資料擷取是否成功。成功擷取將顯示下列日誌項目:
doGetTable: Retrieved schema for table[TableName{schemaName=test, tableName=profiles}] from AWS Glue.
注意
如果您的資料表已設定 columnMapping 欄位,則您只需要將 docdb-metadata-flag = true 參數新增至資料表屬性。
在 AWS Glue 中設定資料庫和資料表
由於連接器的內建結構描述推斷功能會掃描數量有限的文件,而且僅支援部份的資料類型,因此您可能想要將 AWS Glue 用於中繼資料。
若要啟用 AWS Glue 資料表與 Amazon DocumentDB 一起使用,對於您要為其提供補充中繼資料的 DocumentDB 資料庫和集合,您必須擁有 AWS Glue 資料庫和資料表。
若要使用 AWS Glue 資料表作為補充中繼資料
-
使用 AWS Glue 主控台建立與 Amazon DocumentDB 資料庫名稱同名的 AWS Glue 資料庫。
-
將資料庫的 URI 屬性設定為包含 docdb-metadata-flag。
-
(選用) 新增 sourceTable 資料表屬性。此屬性定義 Amazon DocumentDB 中的來源資料表名稱。如果您的 AWS Glue 資料表名稱與 Amazon DocumentDB 中的資料表名稱不同,請使用此屬性。由於 AWS Glue 與 Amazon DocumentDB 之間命名規則存在差異,因此有必要進行此動作。例如,AWS Glue 資料表名稱中不允許大寫字母,但在 Amazon DocumentDB 資料表名稱中允許。
-
(選用) 新增 columnMapping 資料表屬性。此屬性可定義資料欄名稱映射。如果 AWS Glue 資料欄命名規則會阻止您建立與您的 Amazon DocumentDB 資料表具有相同資料欄名稱的 AWS Glue 資料表,則使用此屬性。這非常有用,因為 Amazon DocumentDB 資料欄名稱中允許大寫字母,但 AWS Glue 資料欄名稱中不允許。
columnMapping屬性值應該是格式col1=Col1,col2=Col2中的一組映射。注意
資料欄映射僅適用於頂層資料欄名稱,而不適用於巢狀欄位。
新增 AWS Glue
columnMapping資料表屬性之後,您可以移除disable_projection_and_casingLambda 環境變數。 -
請務必使用適合 AWS Glue 的資料類型,如本文件中所示。
支援的資料類型
本節列出 DocumentDB 連接器用於結構描述推斷的資料類型,以及使用 AWS Glue 中繼資料時的資料類型。
結構描述推斷資料類型
DocumentDB 連接器的結構描述推斷功能會嘗試將值推斷為以下資料類型之一。該資料表顯示 Amazon DocumentDB、Java 和 Apache Arrow 的相應資料類型。
| Apache Arrow | Java 或 DocDB |
|---|---|
| VARCHAR | String |
| 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.yamlPolicies 部分。以下清單摘要說明所需的許可。
-
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 查詢掃描至少 16 MB 的資料。
傳遞查詢
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"}' ))
其他資源
-
如需有關使用 Amazon Athena 聯合查詢將 MongoDB 資料庫連接至 Quick Suite
以建置儀表板和視覺化的文章,請參閱 AWS 巨量資料部落格中的使用 Amazon Athena 聯合查詢視覺化來自 Quick Suite 的 MongoDB 資料 。 如需此連接器的其他資訊,請造訪 GitHub.com 上的相應網站
。