本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Athena DocumentDB 連接器
Amazon Athena DocumentDB 連接器可讓 Athena 與您的 DocumentDB 執行個體通訊,以便您可以使用 查詢 DocumentDB 資料SQL。此連接器也適用於 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 中的組態屬性。
必要條件
使用 Athena 主控台或 AWS Serverless Application Repository,將連接器部署到您的 AWS 帳戶 。如需詳細資訊,請參閱 建立資料來源連線 或 使用 AWS Serverless Application Repository 部署資料來源連接器。
參數
使用本節中的參數來設定 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 – (選用) 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產生金鑰。停用溢出加密可以提高效能,尤其是如果溢出位置使用伺服器端加密。 -
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
您必須先將兩個環境變數新增至 Lambda 函數: docdb_instance_1
和 ,才能使用這兩個SQL陳述式docdb_instance_2
。每個陳述式的值應該為以下格式的 DocumentDB 連接字串:
mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
使用秘密
您可以選擇性地將 AWS Secrets Manager 用於連線字串詳細資訊的部分或全部值。若要搭配 Secrets Manager 使用 Athena 聯合查詢功能,VPC連接至 Lambda 函數的 應具有網際網路存取
如果您使用語法 ${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 SDK會自動嘗試docdb_instance_1_creds
從 Secrets Manager 擷取名為 的秘密,並注入該值來取代 ${docdb_instance_1_creds}
。由 ${
}
字元組合括住的連接字串的任何部分會被解譯為 Secrets Manager 的秘密。如果您指定連接器在 Secrets Manager 中找不到的秘密名稱,則連接器不會取代該文字。
在 中設定資料庫和資料表 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_casing
Lambda 環境變數。 -
請確定您使用適用於本文件 AWS Glue 所列的資料類型。
支援的資料類型
本節列出 DocumentDB 連接器用於結構描述推論的資料類型,以及使用 AWS Glue 中繼資料時的資料類型。
結構描述推斷資料類型
DocumentDB 連接器的結構描述推斷功能會嘗試將值推斷為以下資料類型之一。該資料表顯示 Amazon DocumentDB、Java 和 Apache Arrow 的相應資料類型。
Apache Arrow | Java 或 DocDB |
---|---|
VARCHAR | 字串 |
INT | 整數 |
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 日誌 – 連接器需要存取 CloudWatch 日誌來存放日誌。
-
AWS Secrets Manager 讀取存取 – 如果您選擇將 DocumentDB 端點詳細資訊存放在 Secrets Manager 中,則必須授予連接器對這些秘密的存取權。
-
VPC 存取 – 連接器需要能夠將介面連接至您的 並分離,VPC以便連接到它並與 DocumentDB 執行個體通訊。
效能
Athena Amazon DocumentDB 連接器目前不支援平行掃描,但會嘗試下推述詞作為其 DocumentDB 查詢的一部分,而針對 DocumentDB 集合上之索引的述詞會導致掃描的資料大幅減少。
Lambda 函數執行投影下推,以減少查詢掃描的資料。不過,選取資料欄子集有時會導致較長的查詢執行時間。LIMIT
子句可減少掃描的資料量,但是如果您未提供述詞,則應期望具有 LIMIT
子句的 SELECT
查詢掃描至少 16MB 的資料。
傳遞查詢
Athena Amazon DocumentDB 連接器支援傳遞查詢,且不是以 SQL為基礎。如需查詢 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 Federated Query 將 MongoDB 資料庫連線至 Amazon QuickSight
以建置儀表板和視覺化效果的文章,請參閱大數據部落格中的 QuickSight 使用 Amazon Athena Federated Query 從 Amazon 視覺化 MongoDB 資料。 AWS 如需此連接器的詳細資訊,請造訪對應的網站
on.com GitHub。