全部產品
Search
文件中心

MaxCompute:Lindorm外部表格(雲原生多模資料庫)

更新時間:Sep 09, 2026

本文介紹如何通過MaxCompute建立Lindorm外部表格並映射Lindorm資料來源。

功能介紹

Lindorm是面向物聯網、互連網、車連網等設計和最佳化的雲原生多模超融合資料庫,支援寬表、時序、文本、對象、流、空間等多種資料的統一訪問和融合處理,併兼容SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka等多種標準介面,是阿里巴巴核心業務提供支撐的資料庫之一。

在MaxCompute與阿里雲Lindorm服務間的網路處於連通狀態時,MaxCompute支援通過建立外部表格來關聯Lindorm表。使用Lindorm外部表格,可以實現如下功能:

  • 將Lindorm表中的資料同步到MaxCompute執行後續ETL處理

  • 關聯其他Lindorm表實現聯邦計算

  • 將MaxCompute資料輸出到Lindorm表

適用範圍

  • 地區限制:目前支援地區包括華北2(北京)、華東2(上海)、華北3(張家口)、華東1(杭州)、華南1(深圳)、中國香港、華東 2 金融雲(可用性區域F)、日本(東京)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、德國(法蘭克福)、美國(矽谷)、美國(維吉尼亞)。

  • Lindorm外部表格不支援cluster屬性。

  • 只支援寬表引擎HBase相容模式。

注意事項

讀取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>
(
  <col_name1> <data_type>,
  <col_name2> <data_type>,
  ......
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' --處理Lindorm資料來源的Handler
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'='',
    'hbase.zookeeper.quorum'='',
    --配置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:必填。

      1. 登入Lindorm控制台,在左上方選擇地區。

      2. 在实例列表頁面,單擊目標執行個體名稱,進入該執行個體詳情頁。

      3. 在左側導覽列,選擇資料庫連接。

      4. 在宽表引擎頁簽下,擷取默认用户名。

    • hbase.client.password:必填。

      1. 登入Lindorm控制台,在左上方選擇地區。

      2. 在实例列表頁面,單擊目標執行個體名稱,進入該執行個體詳情頁。

      3. 在左側導覽列,選擇資料庫連接。

      4. 在宽表引擎頁簽下,擷取默认初始密码。

    • '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的相關配置。

使用樣本

  1. 已建立MaxCompute專案,且已經安裝並配置MaxCompute用戶端。

  2. 已開通Lindorm服務並建立Lindorm執行個體。

  3. 已下載並配置Lindorm Shell。詳情請參見通過Lindorm Shell訪問寬表引擎。

  4. 網路連接

    • 已基於專用網路串連方案,開通MaxCompute和Lindorm服務間的網路連接。更多專用網路串連方案資訊,請參見網路開通流程。

    • 網路打通時,MaxCompute側僅打通到所填VPC ID的網路連接,如需跨Region訪問或者訪問該Region的其他VPC,請根據訪問VPC方案(專線直連),打通專線直連方案所填寫的VPC和其他VPC之間的網路。

  5. 使用Lindorm Shell建立Lindorm表並插入資料

    1. 建立lindorm_test表

      CREATE 'lindorm_test','f';
    2. 向表lindorm_test插入資料

      put 'lindorm_test', '1122', 'f:col1', 'hello';
      put 'lindorm_test', '1122', 'f:col2', 'hbase';
    3. 查詢表lindorm_test資料

      scan 'lindorm_test';

      返回結果:

      ROW                                 COLUMN+CELL
       1122                              column=f:col1, timestamp=1634201741745, value=hello
       1122                              column=f:col2, timestamp=1634201835934, value=hbase
      1 row(s)
      Took 0.0766 seconds
  6. 建立MaxCompute外部表格並映射Lindorm資料來源

    1. 在MaxCompute用戶端建立MaxCompute的Lindorm外部表格lindorm_test_ext。

      SET odps.sql.hive.compatible = true;
      SET odps.sql.hbase.version=lindorm;
      CREATE EXTERNAL TABLE lindorm_test_ext
      (
        row_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'='lindorm_test',
        'hbase.zookeeper.quorum'='ld-2z****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020',
        'hbase.client.username'='<user_name>',
        'hbase.client.password'='***',
        'networklink'='<your network link name>');
    2. 查詢外部表格lindorm_test_ext資料

      SET odps.sql.hive.compatible = true;
      SET odps.sql.hbase.version=lindorm;
      SELECT * FROM lindorm_test_ext;
      -- 查詢結果如下:
      +------------+------------+----------+
      | key        | col1       | col2     |
      +------------+------------+----------+
      | 1122       | hello      | hbase    |  
      +------------+------------+----------+
    3. 向外部表格lindorm_test_ext插入資料

      SET odps.sql.hive.compatible = true;
      SET odps.sql.hbase.version = lindorm;
      INSERT OVERWRITE TABLE lindorm_test_ext SELECT '1123', 'lindorm', 'mftestinsert';
    4. 查詢外部表格lindorm_test_ext資料

      SET odps.sql.hive.compatible = true;
      SET odps.sql.hbase.version=lindorm;
      SELECT * FROM lindorm_test_ext;
      -- 查詢結果如下:
      +------------+------------+-------------+
      | key        | col1       | col2        |
      +------------+------------+-------------+
      | 1122       | hello      | hbase       | 
      | 1123       | lindorm    | mftestinsert|   
      +------------+------------+-------------+
    5. 使用scan語句查詢Lindorm表lindorm_test資料。

      scan 'lindorm_test';

      查詢結果如下:

      ROW                                 COLUMN+CELL
       1122                              column=f:col1, timestamp=1634201741745, value=hello
       1122                              column=f:col2, timestamp=1634201835934, value=hbase
       1123                              column=f:col1, timestamp=1634552508947, value=lindorm
       1123                              column=f:col2, timestamp=1634552508947, value=mftestinsert
      2 row(s)
      Took 0.0683 seconds