將 Athena 資料連接器用於外部 Hive 中繼存放區 - Amazon Athena

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

將 Athena 資料連接器用於外部 Hive 中繼存放區

您可以使用適用於外部 Hive 中繼存放區的 Amazon Athena 資料連接器,來查詢在 Simple Storage Service (Amazon S3) 中使用 Apache Hive 中繼存放區的資料集。不需要將中繼資料移轉至。 AWS Glue Data Catalog 在 Athena 管理主控台中,您可以設定 Lambda 函數來與私有 VPC 中的 Hive 中繼存放區通訊,然後將其連接到該中繼存放區。Lambda 與您的 Hive 中繼存放區間的連線受到私有 Amazon VPC 頻道的保護,且不會使用公有網際網路。您可以提供自己的 Lambda 函數程式碼,也可以使用適用於外部 Hive 中繼存放區的 Athena 資料連接器預設實作。

功能概觀

您可以使用適用於外部 Hive 中繼存放區的 Athena 資料連接器執行下列任務:

  • 使用 Athena 主控台註冊自訂目錄並使用它們執行查詢。

  • 為不同的外部 Hive 中繼存放區定義 Lambda 函數,並在 Athena 查詢中加以聯結。

  • 在相同的 Athena 查詢中使用 AWS Glue Data Catalog 和您的外部 Hive 中繼存放區。

  • 在查詢執行內容中將目錄指定為目前預設目錄。如此就無需在查詢中將目錄名稱做為資料庫名稱的前綴。您可以使用 database.table,而不是用語法 catalog.database.table

  • 使用各種工具來執行參考外部 Hive 中繼存放區的查詢。您可以使用 Athena 主控台、 AWS SDK AWS CLI、Athena API,以及更新的 Athena JDBC 和 ODBC 驅動程式。更新的驅動程式具有自訂目錄的支援。

API 支援

適用於外部 Hive 中繼存放區的 Athena 資料連接器,提供對目錄註冊 API 操作和中繼資料 API 操作的支援。

  • 目錄註冊 – 註冊適用於外部 Hive 中繼存放區和聯合資料來源的自訂目錄。

  • 中繼資料 — 使用中繼資料 API,為您向 Athena 註冊的任何目錄提供資料庫 AWS Glue 和表格資訊。

  • Athena JAVA 軟體開發套件用戶端 – 在更新的 Athena Java 軟體開發套件用戶端中使用目錄註冊 API、中繼資料 API 以及支援 StartQueryExecution 操作中的目錄。

參考實作

Athena 提供 Lambda 函數的參考實作,該函數會連接到外部 Hive 中繼存放區。在 Athena Hive 中繼存放區 GitHub 以開放原始碼專案的形式提供參考實作。

參考實施可作為 AWS Serverless Application Repository (SAR)中的以下兩個 AWS SAM 應用程序使用。您可以在 SAR 中使用任一應用程式來建立自己的 Lambda 函數。

  • AthenaHiveMetastoreFunction – Uber Lambda 功能 .jar 檔案。"uber" JAR (也稱為大量 JAR 或具有依存項目的 JAR) 是一種 .jar 檔案,該檔案會將 Java 程式和其依存項目包含在單一檔案中。

  • AthenaHiveMetastoreFunctionWithLayer – Lambda 層和薄型 Lambda 函數 .jar 檔案。

工作流程

下列圖表說明 Athena 如何與您的外部 Hive 中繼存放區互動。

Athena 如何與您的外部 Hive 中繼存放區互動。

在此工作流程中,您連接資料庫的 Hive 中繼存放區位於 VPC 內。您使用 Hive Server2 透過 Hive CLI 來管理 Hive 中繼存放區。

從 Athena 使用外部 Hive 中繼存放區的工作流程包含下列步驟。

  1. 您需要建立一個 Lambda 函數,以將 Athena 連接到 VPC 內部的 Hive 中繼存放區。

  2. 您可以為 Hive 中繼存放區註冊唯一的目錄名稱,並在您的帳戶中註冊相對應的函數名稱。

  3. 當您執行使用目錄名稱的 Athena DML 或 DDL 查詢時,Athena 查詢引擎會呼叫您與目錄名稱相關聯的 Lambda 函數名稱。

  4. 使用 Lambda 函數與 VPC 中的外部 Hive 中繼存放區進行通訊 AWS PrivateLink,並接收中繼資料請求的回應。Athena 會使用來自外部 Hive 中繼存放區的中繼資料,就像它使用預設 AWS Glue Data Catalog的中繼資料一樣。

考量與限制

當您使用適用於外部 Hive 中繼存放區的 Athena 資料連接器時,請考慮下列幾點:

  • 您可以使用 CTAS 在外部 Hive 中繼存放區上建立資料表。

  • 您可以使用 INSERT INTO 將資料插入外部 Hive 中繼存放區。

  • 適用於外部 Hive 中繼存放區的 DDL 支援僅限於下列陳述式。

    • ALTER DATABASE SET DBPROPERTIES

    • ALTER TABLE ADD COLUMNS

    • ALTER TABLE ADD PARTITION

    • ALTER TABLE DROP PARTITION

    • ALTER TABLE RENAME PARTITION

    • 更改資料表的替換資料欄

    • ALTER TABLE SET LOCATION

    • ALTER TABLE SET TBLPROPERTIES

    • CREATE DATABASE

    • CREATE TABLE

    • CREATE TABLE AS

    • DESCRIBE TABLE

    • DROP DATABASE

    • DROP TABLE

    • SHOW COLUMNS

    • SHOW CREATE TABLE

    • SHOW PARTITIONS

    • SHOW SCHEMAS

    • SHOW TABLES

    • SHOW TBLPROPERTIES

  • 您可以擁有的已註冊目錄數目上限為 1,000。

  • Hive 中繼存放區不支援 Kerberos 身分驗證。

  • 若要將 JDBC 驅動程式與外部 Hive 中繼存放區或聯合查詢搭配使用,請將 MetadataRetrievalMethod=ProxyAPI 包含在您的 JDBC 連接字串中。如需有關 JDBC 驅動程式的資訊,請參閱使用 JDBC 連接到 Amazon Athena

  • Hive 隱藏資料欄 $path$bucket$file_size$file_modified_time$partition$row_id 不能用於精細存取控制篩選。

  • Hive 隱藏的系統資料表,例如 example_table$propertiesexample_table$partitions 不受精細存取控制支援。

許可

預先建置和自訂的資料連接器可能需要存取下列資源,才能正常運作。檢查您使用的連接器的資訊,以確保您已正確設定 VPC。如需有關在 Athena 中執行查詢和建立資料來源連接器所需 IAM 許可的資訊,請參閱允許存取外部 Hive 中繼存放區的 Athena 資料連接器允許 Lambda 函數存取外部 Hive 中繼存放區

  • Simple Storage Service (Amazon S3) – 除了將查詢結果寫入 Simple Storage Service (Amazon S3) 中的 Athena 查詢結果位置外,資料連接器也會寫入 Simple Storage Service (Amazon S3) 中的溢出儲存貯體。對此 Simple Storage Service (Amazon S3) 位置,需有連線能力和許可。如需詳細資訊,請參閱本主題後面部分的 Amazon S3 中的溢出位置

  • Athena – 需要存取權才能檢查查詢狀態,並防止溢出掃描。

  • AWS Glue— 如果您的連接器用 AWS Glue 於補充或主要中繼資料,則需要存取權。

  • AWS Key Management Service

  • 政策 – Hive 中繼存放區、Athena Query Federation 和 UDF 還需要 AWS 受管理的策略: AmazonAthenaFullAccess 以外的政策。如需詳細資訊,請參閱Athena 中的 Identity and Access Management

Amazon S3 中的溢出位置

由於針對 Lambda 函數回應大小的限制,大於閾值的回應會溢入您在建立 Lambda 函數時指定的 Simple Storage Service (Amazon S3) 位置。Athena 會直接從 Simple Storage Service (Amazon S3) 讀取這些回應。

注意

Athena 不會移除 Simple Storage Service (Amazon S3) 上的回應檔案。建議您設定保留原則,以自動刪除回應檔案。