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 必須具有. AWS Glue Data Catalog

必要條件

參數

使用本節中的 Lambda 環境變數來設定 DocumentDB 連接器。

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

  • disabled le_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 料傳輸費用

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

  • 啟用案例不敏感 _ 匹配 — (選用) 何時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 於中繼資料。

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

若要將 AWS Glue 表格用於補充描述資料
  1. 當您在 AWS Glue 主控台中編輯表格和資料庫時,請新增下表屬性。

    • docdb-metadata-flag— 此內容向 DocumentDB 連接器指示連接器可將表格用於補充中繼資料。您可以為 docdb-metadata-flag 提供任何值,只要 docdb-metadata-flag 屬性存在於資料表屬性清單中。

  2. (選用) 新增 sourceTable 資料表屬性。此屬性定義 Amazon DocumentDB 中的來源資料表名稱。如果 AWS Glue 表格命名規則無法建立與 Amazon DocumentDB AWS Glue 表格名稱相同的資料表,請使用此屬性。例如, AWS Glue 資料表名稱中不允許大寫字母,但在 Amazon DocumentDB 資料表名稱中允許。

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

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

    注意

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

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

  4. 請確定您使用本文件中所列適 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 箭頭。

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 防護記錄 — 連接器需要存取 CloudWatch 記錄檔以儲存防護記錄。

  • AWS Secrets Manager 讀取存取權 — 如果您選擇將 DocumentDB 端點詳細資料儲存在 Secrets Manager 中,您必須授與連接器存取這些密碼。

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

效能

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

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

直通查詢

Athena Amazon DocumentDB 連接器支持直通查詢,並且是基於 NoSQL。如需查詢 Amazon 文件資料庫的相關資訊,請參閱 Amazon 文件資料庫開發人員指南中的查詢

若要搭配 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"}' ))

其他資源