Amazon Athena HBase 連接器
Amazon Athena HBase 連接器讓 Amazon Athena 能夠與您的 Apache HBase 執行個體通訊,以便使用 SQL 來查詢您的 HBase 資料。
與傳統的關聯式資料存放區不同,HBase 集合沒有集結構描述。HBase 沒有中繼資料存放區。HBase 集合中的每個條目可以有不同的欄位和資料類型。
HBase 連接器支援兩種產生資料表結構描述資訊的機制:基本結構描述推斷和 AWS Glue Data Catalog 中繼資料。
結構描述推斷是預設值。此選項會掃描集合中的少量文件,形成所有欄位的聯集,以及強制具有非重疊資料類型的欄位。此選項適用於大多數具有統一條目的集合。
對於具有更多資料類型的集合,連接器支援從 AWS Glue Data Catalog 中擷取中繼資料。如果連接器看到與您的 HBase 命名空間和集合名稱相匹配的 AWS Glue 資料庫和資料表,它會從相應的 AWS Glue 資料表中獲取其結構描述資訊。當您建立 AWS Glue 資料表時,我們建議您將其設為所有欄位的超集合,您可能想要從 HBase 集合中存取它們。
如果您的帳戶中已啟用 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 部署資料來源連接器 。
參數
使用本節中的參數來設定 HBase 連接器。
注意
2024 年 12 月 3 日及之後建立的 Athena 資料來源連接器使用 AWS Glue 連線。
下方列出的參數名稱和定義適用於 2024 年 12 月 3 日之前建立的 Athena 資料來源連接器。這些可能與其對應的 AWS Glue 連線屬性不同。從 2024 年 12 月 3 日開始,只有在您手動部署舊版 Athena 資料來源連接器時,才會使用下列參數。
我們建議您使用 Glue 連線物件來設定 HBase 連接器。為此,請將 HBase 連接器 Lambda 的 glue_connection 環境變數設定為要使用的 Glue 連線名稱。
Glue 連線屬性
使用下列命令來取得 Glue 連線物件的結構描述。此結構描述包含可用於控制連線的所有參數。
aws glue describe-connection-type --connection-type HBASE
Lambda 環境屬性
-
glue_connection – 指定與聯合連接器關聯的 Glue 連線名稱。
注意
-
使用 Glue 連線的所有連接器都必須使用 AWS Secrets Manager 來存放憑證。
-
使用 Glue 連線建立的 HBase 連接器不支援使用多工處理常式。
-
使用 Glue 連線建立的 HBase 連接器僅支援
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_hbase - 如果存在,則指定當不存在目錄特定環境變數時要使用的 HBase 連接字串。
-
enable_case_insensitive_match – (選用) 當
true時,針對 HBase 中的資料表名稱執行不區分大小寫搜尋。預設值為false。查詢包含大寫的資料表名稱時使用。
指定連接字串
您可以提供一個或多個屬性,以定義與連接器搭配使用的 HBase 執行個體的 HBase 連接詳細資訊。因此,請設定您要在 Athena 使用的目錄名稱所對應的 Lambda 環境變數。例如,假設您想要使用下列查詢來查詢來自 Athena 的兩個不同 HBase 執行個體:
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
您必須先將兩個環境變數 hbase_instance_1 和 hbase_instance_2 新增至 Lambda 函數,才能使用這兩個 SQL 陳述式。每個的值應該為以下格式的 HBase 連接字串:
master_hostname:hbase_port:zookeeper_port
使用秘密
您可以選擇使用 AWS Secrets Manager 作為連接字串詳細資訊的部分或全部值。若要搭配使用 Athena 聯合查詢功能和 Secrets Manager,連接到您的 Lambda 函數的 VPC 應該具有網際網路存取權
如果您使用語法 ${my_secret} 將 Secret Manager 秘密的名稱放入連接字串中,連接器會使用您在 Secret Manager 中的使用者名稱和密碼值來取代秘密名稱。
例如,假設您將 hbase_instance_1 的 Lambda 環境變數設定為以下值:
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
Athena Query Federation 軟體開發套件會自動嘗試從 Secrets Manager 中擷取名為 hbase_instance_1_creds 的秘密,並將該值放入 ${hbase_instance_1_creds} 位置。由 ${
} 字元組合括住的連接字串的任何部分會被解譯為 Secrets Manager 的秘密。如果您指定連接器在 Secrets Manager 中找不到的秘密名稱,則連接器不會取代該文字。
在 AWS Glue 中設定資料庫和資料表
連接器的內建結構描述推斷僅支援在 HBase 中序列化為字串的值 (例如,String.valueOf(int))。由於連接器的內建結構描述推斷功能受到限制,因此您可能需要對中繼資料使用 AWS Glue。若要啟用 AWS Glue 資料表以便與 HBase 搭配使用,您必須擁有 AWS Glue 資料庫和資料表,其名稱符合您要為其提供補充中繼資料的 HBase 命名空間和資料表。使用 HBase 資料欄系列命名慣例是可選的,但不是必需的。
若要使用 AWS Glue 資料表作為補充中繼資料
-
當您在 AWS Glue 主控台中編輯資料表和資料庫時,請新增以下資料表屬性:
hbase-metadata-flag - 此屬性向 HBase 連接器發出指示,連接器可使用資料表作為補充中繼資料。您可以為
hbase-metadata-flag提供任何值,只要hbase-metadata-flag屬性存在於資料表屬性清單中。-
hbase-native-storage-flag - 使用此標記可切換連接器支援的兩個值序列化模式。根據預設,當此欄位不存在時,連接器假定所有值都作為字串儲存在 HBase 中。因此,它會嘗試將 HBase 中的
INT、BIGINT和DOUBLE等資料類型作為字串進行剖析。如果使用 AWS Glue 中資料表的任何值設定此欄位,連接器會切換至「原生」儲存模式,並嘗試使用以下函數將INT、BIGINT、BIT和DOUBLE作為位元組進行讀取:ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
-
請務必使用適合 AWS Glue 的資料類型,如本文件中所示。
建立資料欄系列模型
Athena HBase 連接器支援兩種方式來建立 HBase 資料欄系列模型:完全限定 (扁平化) 命名 (例如 family:column),或使用 STRUCT 物件。
在 STRUCT 模型中,STRUCT 欄位的名稱應與資料欄系列相符,而 STRUCT 的子項應該與該系列的資料欄名稱相符。但是,由於諸如 STRUCT 等複雜類型尚不完全支援述詞下推和資料欄讀取,因此目前不建議使用 STRUCT。
下圖顯示在 AWS Glue 中設定的資料表,它結合使用了這兩種方法。
支援的資料類型
連接器會擷取所有 HBase 值作為基本位元組類型。然後,根據您在 AWS Glue Data Catalog 中定義資料表的方式,它將值映射到下表中 Apache Arrow 的資料類型之一。
| AWS Glue 資料類型 | Apache Arrow 資料類型 |
|---|---|
| int | INT |
| bigint | BIGINT |
| double | FLOAT8 |
| float | FLOAT4 |
| boolean | BIT |
| binary | VARBINARY |
| string | VARCHAR |
注意
如果您不使用 AWS Glue 來補充中繼資料,連接器的結構描述推斷僅使用資料類型 BIGINT、FLOAT8 和 VARCHAR。
所需的許可
如需詳細了解此連接器所需的 IAM 政策,請檢閱 athena-hbase.yamlPolicies 部分。以下清單摘要說明所需的許可。
-
Amazon S3 寫入存取 - 連接器需要 Amazon S3 中某個位置的寫入存取權,以便從大型查詢中溢寫結果。
-
Athena GetQueryExecution - 當上游 Athena 查詢終止時,連接器會使用此許可快速失敗。
-
AWS Glue Data Catalog - HBase 連接器需要 AWS Glue Data Catalog 的唯讀存取權,以獲取結構描述資訊。
-
CloudWatch Logs - 連接器需要存取 CloudWatch Logs 以儲存日誌。
-
AWS Secrets Manager 讀取許可 - 如果您選擇將 HBase 端點詳細資訊儲存在 Secrets Manager 中,您必須授予連接器可存取這些秘密的許可。
-
VPC 存取 - 連接器需要能夠將介面連接到 VPC 並能進行分離,以便可進行連接並與 HBase 執行個體通訊。
效能
Athena HBase 連接器透過平行讀取每個區域伺服器,嘗試對 HBase 執行個體平行處理查詢。Athena HBase 連接器執行述詞下推,以減少查詢掃描的資料。
Lambda 函數還執行投影下推,以減少查詢掃描的資料。不過,選取資料欄子集有時會導致較長的查詢執行時期。LIMIT 子句可減少掃描的資料量,但是如果您未提供述詞,則應期望具有 LIMIT 子句的 SELECT 查詢掃描至少 16 MB 的資料。
HBase 容易導致查詢失敗和可變的查詢執行時間。您可能必須重試查詢多次才能成功。HBase 連接器由於並行而對限流保有彈性。
傳遞查詢
HBase 連接器支援傳遞查詢,並且以 NoSQL 為基礎。如需有關使用篩選查詢 Apache HBase 的資訊,請參閱 Apache 文件中的篩選語言
若要透過 HBase 使用傳遞查詢,請使用下列語法:
SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))
下列範例 HBase 傳遞查詢會篩選 default 資料庫的 employee 集合內年齡為 24 或 30 歲的員工。
SELECT * FROM TABLE( system.query( DATABASE => 'default', COLLECTION => 'employee', FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' || ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')' ))
授權資訊
Amazon Athena HBase 連接器專案是依據 Apache-2.0 License
其他資源
如需此連接器的其他資訊,請造訪 GitHub.com 上的相應網站