Lindorm外部表(云原生多模数据库)

更新时间:
复制为 MD 格式

本文介绍如何通过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属性。

注意事项

读取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不填,会自动匹配到defaultNamespace上。必须提前通过Lindorm控制台建好。

    • 'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>':必填。LindormZookeeperIP或域名。即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}':可选。LindormZookeeper端口。Lindorm的默认Zookeeper端口为30020。

    • 'mcfed.zookeeper.session.timeout'='<value>':可选。Zookeeper的超时时间。单位为毫秒,建议设置为30000。

    • 'hbase.client.retries.number'='<value>':可选。Lindorm控制台连接重试次数。

    • 'networklink'='<networklink_name>':必选。Lindorm实例所在VPCMaxCompute网络链接。

    说明

    mcfed.zookeeperhbase开头的配置是Zookeeper的相关配置。

使用示例

  1. 创建MaxCompute项目,且已经安装并配置MaxCompute客户端

  2. 已开通Lindorm服务并创建Lindorm实例

  3. 已下载并配置Lindorm Shell。详情请参见通过Lindorm Shell访问宽表引擎

  4. 网络连接

    • 已基于专有网络连接方案,开通MaxComputeLindorm服务间的网络连接。更多专有网络连接方案信息,请参见网络开通流程

    • 网络打通时,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';

      返回结果如图:

      image

  6. 创建MaxCompute外部表并映射Lindorm数据源

    1. MaxCompute客户端创建MaxComputeLindorm外部表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语句查询Lindormlindorm_test数据。

      scan 'lindorm_test';

      查询结果如下:

      image