本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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,則您在 中部署的 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 部署資料來源連接器。
參數
使用本節中的參數來設定 HBase 連接器。
注意
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 – (選用) 用於溢出的 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,連接器會切換到「原生」儲存模式BIGINT
,並嘗試使用下列函數將INT
、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
查詢掃描至少 16MB 的資料。
HBase 容易導致查詢失敗和可變的查詢執行時間。您可能必須重試查詢多次才能成功。HBase 連接器由於並行而對限流保有彈性。
傳遞查詢
HBase 連接器支援傳遞查詢,且以 NoSQL 為基礎。如需有關使用篩選查詢 Apache HBase 的資訊,請參閱 Apache 文件中的篩選語言
若要搭配 HBase 使用傳遞查詢,請使用下列語法:
SELECT * FROM TABLE(
system.query(
database => 'database_name
',
collection => 'collection_name
',
filter => '{query_syntax
}'
))
下列範例適用於default
資料庫employee
集合中 24 或 30 歲員工 HBase 傳遞查詢篩選條件。
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 上的相應網站