ApsaraDB for SelectDB支援聯邦查詢,能夠快速整合資料湖、資料庫、遠端檔案等外部資料源,為您提供簡便而高效的資料分析體驗。本文介紹SelectDB如何使用Catalog整合Hive資料來源,對Hive資料來源進行聯邦分析。
前提條件
注意事項
支援Hive1、Hive2、Hive3版本。
支援Managed Table、External Table以及部分Hive View。
支援識別Hive Metastore中儲存的Hive、Iceberg、Hudi中繼資料。
目前,雲資料庫 SelectDB 版對External Catalog中的資料只支援讀操作。
樣本環境
本樣本以Linux系統為例,在SelectDB中,使用聯邦技術查詢基於HDFS構建的Hive中test_db.test_t資料。在實際使用中,請根據您的系統和使用環境修改對應參數。樣本環境如下:
業務情境:非HA
來源資料Hive的構建類型:HDFS
來源資料庫:test_db
來源資料表:test_t
來源資料準備
登入目標來源資料Hive。
建立資料庫testdb。
CREATE database if NOT EXISTS test_db;
建立表Hive_t。
CREATE TABLE IF NOT EXISTS test_t ( id INT, name STRING, age INT );
插入資料。
-- 插入資料 INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
操作步驟
步驟一:串連執行個體
串連SelectDB執行個體。具體操作,請參見通過MySQL用戶端串連雲資料庫SelectDB版執行個體。
步驟二:整合Hive
SelectDB通過建立External Catalog整合外部資料源,不同的業務情境,Catalog的配置參數不同,根據您的業務情境,選擇合適的文法以及參數配置。
建立Catalog後,雲資料庫 SelectDB 版會自動同步資料目錄的資料庫和表。針對不同的資料目錄和資料表格式,雲資料庫 SelectDB 版會進行列與列之間的關係映射。如果您還不清楚Hive與SelectDB的列映射關係,請參見下述列類型映射章節。
Hive基於HDFS構建
文法
CREATE CATALOG <catalog_name> PROPERTIES (
'type'='<type>',
'hive.metastore.uris' = '<hive.metastore.uris>',
'hadoop.username' = '<hadoop.username>',
'dfs.nameservices'='<hadoop.username>',
'dfs.ha.namenodes.your-nameservice'='<dfs.ha.namenodes.your-nameservice>',
'dfs.namenode.rpc-address.your-nameservice.nn1'='<dfs.namenode.rpc-address.your-nameservice.nn1>',
'dfs.namenode.rpc-address.your-nameservice.nn2'='<dfs.namenode.rpc-address.your-nameservice.nn2>',
'dfs.client.failover.proxy.provider.your-nameservice'='<dfs.client.failover.proxy.provider.your-nameservice>'
);
參數說明
非HA情境
參數 | 必選 | 說明 |
catalog_name | 是 | Catalog的名稱。 |
type | 是 | Catalog類型。固定填寫hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
HA情境
參數 | 必選 | 說明 |
catalog_name | 是 | Catalog的名稱。 |
type | 是 | Catalog類型。固定填寫hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
hadoop.username | 否 | HDFS使用者名稱。 |
dfs.nameservices | 否 | Name Service名稱,與已有Hive環境依賴的hdfs-site.xml設定檔裡dfs.nameservices的值保持一致。 |
dfs.ha.namenodes.[nameservice ID] | 否 | NameNode的ID列表,與已有Hive環境依賴的hdfs-site.xml設定檔裡的相應配置項的值保持一致。 |
dfs.namenode.rpc-address.[nameservice ID].[name node ID] | 否 | NameNode的RPC地址,數量與NameNode數量相同,與已有Hive環境依賴的hdfs-site.xml設定檔裡的相應配置項的值保持一致。 |
dfs.client.failover.proxy.provider.[nameservice ID] | 否 | HDFS用戶端串連活躍NameNode的Java類,通常是 |
非HA情境樣本
CREATE CATALOG hive_catalog PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
Hive基於阿里雲OSS構建
文法
此處文法同Hive基於HDFS構建一致,只是必選參數不同。
參數說明
參數 | 必選 | 說明 |
type | 是 | Catalog類型。固定填寫hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
oss.endpoint | 是 | 訪問OSS資料的 |
oss.access_key | 是 | 訪問OSS資料的 |
oss.secret_key | 是 | 訪問OSS資料的 |
樣本
CREATE CATALOG hive_catalog PROPERTIES (
"type"="hms",
"hive.metastore.uris" = "thrift://172.0.0.1:9083",
"oss.endpoint" = "oss-cn-beijing.aliyuncs.com",
"oss.access_key" = "ak",
"oss.secret_key" = "sk"
);
步驟三:查看Catalog
您可以通過以下語句,查看Catalog建立是否成功。
SHOW CATALOGS; --查看CATALOG是否建立成功
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 436009309195 | hive_catalog | hms | | 2024-07-19 17:09:08.058 | 2024-07-19 18:04:37 | |
| 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
步驟四:查看Hive庫表資料
在目標External Catalog目錄下查看Hive庫表資料。
說明串連SelectDB執行個體後,預設操作目錄為Internal Catalog。
切換目錄至目標External Catalog。
SWITCH hive_catalog;
查看資料。
完成目標目錄切換後,您可以像使用Internal Catalog一樣,對External Catalog的資料進行查看和訪問。例如以下操作:
查看資料庫列表:
SHOW DATABASES;
切換資料庫:
USE test_db;
查看資料庫表列表:
SHOW TABLES;
查看錶資料:
SELECT * FROM test_t;
在Internal Catalog目錄下查看Iceberg庫表資料。
--查看hive_catalog目錄下,資料庫test_db中表test_t的資料。 SELECT * FROM hive_catalog.test_db.test_t;
更多操作:遷移資料
完成資料來源整合後,如果你需要將Hive的歷史資料移轉至SelectDB中,您可通過內聯文法進行歷史資料移轉,具體操作,請參見Insert Into。
列類型映射
以下HMS Type適用於Hive、Iceberg和Hudi。
以下部分複雜結構的HMS Type和SelectDB Type支援嵌套。
array<type>:
嵌套樣本:array<map<string, int>>
map<KeyType, ValueType>:
嵌套樣本:map<string, array<int>>
struct<col1: Type1, col2: Type2, ...>:
嵌套樣本:struct<col1: array<int>, col2: map<int, date>>
HMS Type | SelectDB Type |
boolean | boolean |
tinyint | tinyint |
smallint | smallint |
int | int |
bigint | bigint |
date | date |
timestamp | datetime |
float | float |
double | double |
char | char |
varchar | varchar |
decimal | decimal |
array<type> | array<type> |
map<KeyType, ValueType> | map<KeyType, ValueType> |
struct<col1: Type1, col2: Type2, ...> | struct<col1: Type1, col2: Type2, ...> |
other | unsupported |