在MaxCompute與阿里雲Lindorm服務間的網路處於連通狀態時,MaxCompute支援您通過建立外部表格來關聯Lindorm表。使用Lindorm外部表格,可以將Lindorm表中的資料同步到MaxCompute進行後續ETL處理,也可以關聯Lindorm表進行聯邦計算,或將MaxCompute資料輸出到Lindorm表中。本文為您介紹如何通過MaxCompute建立Lindorm外部表格並映射Lindorm資料來源。
背景資訊
Lindorm是面向物聯網、互連網、車連網等設計和最佳化的雲原生多模超融合資料庫,支援寬表、時序、文本、對象、流、空間等多種資料的統一訪問和融合處理,併兼容SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka等多種標準介面,是阿里巴巴核心業務提供支撐的資料庫之一。更多Lindorm資訊請參見Lindorm產品概述。
前提條件
建立Lindorm外部表格前,請確認已經滿足如下條件:
已建立待關聯Lindorm表的目標MaxCompute專案。
更多建立MaxCompute專案資訊,請參見建立MaxCompute專案。
已安裝MaxCompute用戶端。
更多安裝MaxCompute用戶端操作,請參見安裝並配置MaxCompute用戶端。
已基於專用網路串連方案,開通MaxCompute和Lindorm服務間的網路連接。
更多專用網路串連方案資訊,請參見網路開通流程。
已開通Lindorm服務並建立Lindorm執行個體。詳情請參見建立執行個體。
已下載並配置Lindorm Shell。詳情請參見通過Lindorm Shell訪問寬表引擎。
使用限制
由於只有華北2(北京)、華東2(上海)、華北3(張家口)、華東1(杭州)、華南1(深圳)、中國香港、華東 2 金融雲(可用性區域F)、日本(東京)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、德國(法蘭克福)、美國(矽谷)、美國(維吉尼亞)地區開通了專線直連訪問VPC方案,僅以上地區可以建立Lindorm外部表格,其他地區暫不支援。
網路打通時,MaxCompute側僅打通到所填VPC ID的網路連接,如需跨Region訪問或者訪問該Region的其他VPC,請根據云上VPC現有打通方案,打通專線直連方案所填寫的VPC和其他VPC之間的網路。
Lindorm外部表格不支援cluster屬性。
注意事項
讀取Lindorm源表資料時,如果源表中的列數小於外表DDL中的列數,系統會將缺少的列值補充為NULL。反之(大於時),會丟棄超出的列資料。
建立Lindorm外部表格文法
在建立Lindorm外部表格時,您需要在建表DDL語句中指定HBaseStorageHandler,並配置Lindorm執行個體相關資訊。建表時,表名和欄位名大小寫不敏感。在查詢表或欄位時,無需區分大小寫,且不支援強制轉換大小寫。建表語句定義如下。
--開啟Hive相容模式。
SET odps.sql.hive.compatible = true;
--配置odps.sql.hbase.version參數,切換HBase版本為lindorm。
SET odps.sql.hbase.version=lindorm;
--建立Lindorm外部表格。
CREATE EXTERNAL TABLE if NOT EXISTS <mc_lindorm_external>
(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
--處理Lindorm資料來源的Handler。
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES(
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>')
TBLPROPERTIES(
--hbase.table.name和mcfed.hbase.zookeeper.quorum必須配置。
'hbase.table.name'='<namespace:lindorm_table_name>',
'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>',
--配置hbase.client.username和hbase.client.password參數。
'hbase.client.username'='****','hbase.client.password'='****',
--hbase.zookeeper.property.clientPort、mcfed.zookeeper.session.timeout和hbase.client.retries.number為選擇性參數。
--hbase.zookeeper.property.clientPort的預設值為30020。
['hbase.zookeeper.property.clientPort'='{30020}',]
['mcfed.zookeeper.session.timeout'='<value>',]
['hbase.client.retries.number'='<value>',]
'networklink'='<networklink_name>'
);參數說明
mc_lindorm_external:必填。待建立Lindorm外部表格的名稱。
col_name:必填。Lindorm外部表格的列名稱。
data_type:必填。列的資料類型。
with serdeproperties:
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>':必填。Lindorm外部表格與Lindorm執行個體中表的列映射關係,詳情請參見HBaseIntegration-ColumnMapping。
RowKey(
:key1[,:key2,:keyn])必須放在最前面。列格式為
col-family:col-name1,col-family:col-name2。一個作業中col-family只能有一個。
tblproperties:
'hbase.table.name'='<namespace:lindorm_table_name>':必填。MaxCompute所關聯的Lindorm執行個體中的Namespace和表的名稱,如果Namespace不填,會自動匹配到default的Namespace上。必須提前通過Lindorm控制台建好。
'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>':必填。Lindorm的Zookeeper的IP或網域名稱。即Lindorm執行個體的Java API訪問地址。
hbase.client.username:必填。您可以登入Lindorm控制台,在執行個體列表頁面單擊目標執行個體名稱後,在左側導覽列單擊資料庫連接,即可在寬表引擎頁簽的預設使用者名處擷取。
hbase.client.password:必填。您可以登入Lindorm控制台,在執行個體列表頁面單擊目標執行個體名稱後,在左側導覽列單擊資料庫連接,即可在寬表引擎頁簽的預設初始密碼處擷取。
'hbase.zookeeper.property.clientPort'='{2181|30020}':可選。Lindorm的Zookeeper連接埠。Lindorm的預設Zookeeper連接埠為30020。
'mcfed.zookeeper.session.timeout'='<value>':可選。Zookeeper的逾時時間。單位為毫秒,建議設定為30000。
'hbase.client.retries.number'='<value>':可選。Lindorm控制台串連重試次數。
'networklink'='<networklink_name>':必選。Lindorm執行個體所在VPC的MaxCompute網路連結。
說明mcfed.zookeeper和hbase開頭的配置是Zookeeper的相關配置。
使用樣本
使用Lindorm Shell建立Lindorm表並插入資料。
建立mf_lindorm_test_t表。
CREATE 'mf_lindorm_test_t','f';向表mf_lindorm_test_t插入資料。
put 'mf_lindorm_test_t', '1122', 'f:col1', 'hello'; put 'mf_lindorm_test_t', '1122', 'f:col2', 'hbase';查詢表mf_lindorm_test_t資料。
scan 'mf_lindorm_test_t';查詢結果如下圖所示:

建立MaxCompute外部表格並映射Lindorm資料來源。
配置環境資訊並建立MaxCompute的Lindorm外部表格mf_lindorm_test_t_ext。
set odps.sql.hive.compatible = true; set odps.sql.hbase.version=lindorm; CREATE EXTERNAL TABLE mf_lindorm_test_t_ext ( key int, col1 string, col2 string ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( 'hbase.columns.mapping'=':key,f:col1,f:col2') TBLPROPERTIES ( 'hbase.table.name'='mf_lindorm_test_t', 'hbase.zookeeper.quorum'='ld-2z****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020', 'hbase.client.username'='root', 'hbase.client.password'='root', 'networklink'='networklink4hbase');查詢外部表格mf_lindorm_test_t_ext資料。
set odps.sql.hive.compatible = true; set odps.sql.hbase.version=lindorm; select * from mf_lindorm_test_t_ext;查詢結果如下:
+------------+------------+----------+ | key | col1 | col2 | +------------+------------+----------+ | 1122 | hello | hbase | +------------+------------+----------+向外部表格mf_lindorm_test_t_ext插入資料。
執行
INSERT OVERWRITE語句向已建立的外部表格寫入資料。set odps.sql.hive.compatible = true; set odps.sql.hbase.version=lindorm; INSERT OVERWRITE TABLE mf_lindorm_test_t_ext SELECT '1123', 'lindorm', 'mftestinsert';重新查詢外部表格mf_lindorm_test_t_ext資料。
set odps.sql.hive.compatible = true; set odps.sql.hbase.version=lindorm; select * from mf_lindorm_test_t_ext;查詢結果如下:
+------------+------------+-------------+ | key | col1 | col2 | +------------+------------+-------------+ | 1122 | hello | hbase | | 1123 | lindorm | mftestinsert| +------------+------------+-------------+使用
scan語句查詢Lindorm表mf_lindorm_test_t資料。scan 'mf_lindorm_test_t';查詢結果如下:
