快速入门

本文介绍如何通过Lindorm计算引擎的OLAPETL资源组快速使用SQL语言读写数据。

前提条件

  • 已开通Lindorm宽表引擎。具体操作,请参见创建实例

  • 已开通Lindorm计算引擎。具体操作,请参见开通与变配

  • 已将客户端IP地址添加至Lindorm白名单。具体操作,请参见设置白名单

使用OLAP资源组

计算引擎OLAP资源组提供了兼容MySQL的访问接口,面向查询分析场景,具备高并发低延迟查询响应能力。OLAP资源组开通后分配常驻计算资源,确保查询快速响应

步骤一:创建OLAP资源组

  1. 登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理

  2. 实例详情页的配置信息区域,单击计算引擎操作列的资源组管理image

  3. 资源组详情页中单击创建资源组,配置以下内容:

    参数

    说明

    资源组类型

    选择OLAP资源组

    资源组名称

    资源组的名字,仅支持小写字母和数字,且长度不超过63个字符。例如cg0

    节点规格

    选择节点规格。

    作业工作节点数

    取值范围:[4,1024],默认值为4

  4. 单击确定,创建资源组。

    说明

    创建过程大约需要20分钟。

  5. 资源组详情界面,新创建的资源组状态&描述信息处于运行中后,您可以将悬浮鼠标在OLAP资源组名称之上,获取OLAP资源组VPC内网连接地址,例如jdbc:mysql://ld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com:9030

  6. 配置MySQL客户端后,通过JDBC连接指定OLAP资源组的VPC内网地址,并使用Lindorm宽表引擎的用户名和密码登录,即可通过MySQL协议连接到OLAP资源组执行SQL查询。

    mysql -hld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com -P9030 -uroot -p

步骤二:访问数据

访问列存数据

列存数据是兼容Iceberg生态的列式存储数据湖。数据存储在Lindorm实例的文件引擎之中,可以通过OLAP资源组写入与查询数据。

列存数据存储在名为lindorm_columnarCatalog(用来标识不同的数据源)中,通过MySQL协议连接成功后,默认访问列存数据的Catalog。您也可以执行SET CATALOG lindorm_columnar;显式切换到列存数据Catalog中。

  1. 创建并使用数据库。

    -- 创建数据库
    CREATE DATABASE olapdemo;
    
    -- 使用该数据库
    USE olapdemo;
  2. 创建数据表并写入数据。

    -- 创建表
    CREATE TABLE test (id INT, name STRING) ENGINE = iceberg;
    
    -- 插入数据
    INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');
  3. 查询数据。

    • 示例1:

      SELECT id, name FROM test WHERE id != 0;

      返回结果:

      +------+--------+
      | id   | name   |
      +------+--------+
      |    1 | Edison |
      +------+--------+
    • 示例2:

      SELECT count(distinct name) FROM test;

      返回结果:

      +----------------------+
      | count(DISTINCT name) |
      +----------------------+
      |                    2 |
      +----------------------+
    • 示例3:

      SELECT * FROM
       (SELECT id, name FROM test WHERE id != 0) t0
       JOIN
       (SELECT id, name FROM test WHERE id != 2) t1
       ON t0.id=t1.id;
      +------+--------+------+--------+
      | id   | name   | id   | name   |
      +------+--------+------+--------+
      |    1 | Edison |    1 | Edison |
      +------+--------+------+--------+
  4. 删除表。

    DROP TABLE test;
  5. 删除数据库。

    DROP DATABASE olapdemo;

访问宽表数据

OLAP资源组支持直接查询宽表引擎中的数据,可借助其计算能力高效执行复杂查询计算。OLAP资源组不支持创建或写入宽表引擎数据表,只支持数据的查询操作。

宽表引擎数据存储在名为lindorm_tableCatalog中。访问宽表引擎中的数据,需显式执行SET CATALOG lindorm_table;切换至该Catalog中。

若您已有可使用的宽表,请直接进入下一步。若您尚未创建,请连接宽表引擎,参考以下语句创建宽表tb

-- 创建数据库
CREATE DATABASE test; 

--使用该数据库
USE test; 

--创建数据表,并插入两条数据
CREATE TABLE tb (id varchar, name varchar, address varchar,  primary key(id, name)) ; 
UPSERT INTO tb (id, name, address) values ('001', 'Jack',  'hz'); 
UPSERT INTO tb (id, name, address) values ('002', 'Edison',  'bj'); 

在连接OLAP资源组的MySQL命令行工具中,执行以下查询语句访问宽表数据。

  1. 显式切换数据源并使用数据库。

    -- 显式切换数据源
    SET CATALOG lindorm_table;
    
    -- 使用test数据库
    USE test;
  2. 查询宽表数据。

    • 示例1:

      SELECT * FROM tb LIMIT 5;

      返回结果:

      +------+--------+---------+
      | id   | name   | address |
      +------+--------+---------+
      | 001  | Jack   | hz      |
      | 002  | Edison | bj      |
      +------+--------+---------+
    • 示例2:

      SELECT count(*) FROM tb;

      返回结果:

      +----------+
      | count(*) |
      +----------+
      |        2 |
      +----------+

使用ETL资源组

计算引擎ETL资源组提供ServerlessSpark SQL查询与写入能力,资源按需申请,自动释放,适合低频查询或离线报表查询场景。

步骤一:开通资源组

  1. 登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理

  2. 实例详情页的配置信息区域,单击计算引擎操作列的资源组管理image

  3. 资源组详情页中单击创建资源组,配置以下内容:

    参数

    说明

    资源组类型

    选择ETL资源组

    资源组名称

    资源组的名字,仅支持小写字母和数字,且长度不超过63个字符。例如cg0

    单日资源消耗限额

    资源组每日消耗的能力单元CU(Capacity Unit)资源上限,单位为CU*Hour。默认值为100000

    重要

    超出上限,作业会被强制立即删除。稳定性要求高的资源组可以配置为0,表示无限制。

    CPU上限(核)

    资源组CPU上限。取值范围:[100,100000]。

    内存上限(GB)

    资源组内存上限。取值范围:[400G,1000000G],无默认值。

    授权用户

    默认值为*,代表允许所有用户访问资源组。

  4. 单击确定,创建资源组。

步骤二:环境准备

说明

以下环境均部署于与Lindorm实例处于同一VPC网络的ECS实例内。

  1. 安装Java环境且JDK1.8及以上版本。

  2. 下载Spark发布包

  3. 解压Spark发布包。

  4. 使用解压后的路径设置SPARK_HOME环境变量。

export SPARK_HOME=/path/to/spark/;
  1. 填写配置文件:$SPARK_HOME/conf/beeline.conf

    • endpoint:Lindorm计算引擎的JDBC地址。如何获取,请参见查看连接地址

    • user:宽表引擎的用户名。

    • password:宽表用户名对应的密码。

    • shareResource:相同用户的多个会话之间是否共享计算资源,默认值为true

    • compute-group:设置要使用的计算引擎ETL资源组的名字,不设置则默认为default

  2. 进入$SPARK_HOME/bin目录并运行./beeline命令。您将看到以下信息:

    Welcome to Lindorm Distributed Processing System (LDPS) !!!
    Initializing environment. It might take minutes ...
    Environemnt prepared. You may visit your jdbc cluster by below url:
    http://alb-boqak6zfns5gzx****.cn-hangzhou.alb.aliyuncsslb.com/proxy/75ce76086b61470da7046bd4c2b7****
    Please note -- you are sharing this JDBC cluster between SQL sessions from the same user.
    The cluster will be released by auto if idle for 4 hours.
    You may also kill it manually by visiting above web url and clicking 'kill' in tab of 'Query Engine'
    lindorm-beeline>

    在交互会话中输入SQL语句,执行写入或查询操作。

    说明

    通过返回信息中的链接http://alb-boqak6zfns5gzx****.cn-hangzhou.alb.aliyuncsslb.com/proxy/75ce76086b61470da7046bd4c2b7****,您可以访问计算引擎的SparkUI界面

步骤三:访问数据

访问列存数据

列存数据是兼容Iceberg生态的列式存储数据湖,数据存储在Lindorm实例的文件引擎之中,可以通过Spark SQL来写入和查询数据。

列存数据存储在名为lindorm_columnarCatalog(用来标识不同的数据源)中,通过MySQL协议连接成功后,默认访问列存数据的Catalog。您也可以执行SET CATALOG lindorm_columnar;显式切换到列存数据Catalog中。

  1. 创建并使用数据库。

    -- 创建数据库
    CREATE DATABASE etldemo;
    
    -- 使用该数据库
    USE etldemo;
  2. 创建数据表并写入数据

    -- 创建表
    CREATE TABLE test (id INT, name STRING);
    
    -- 插入数据
    INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');
  3. 查询数据。

    • 示例1:

      SELECT id, name FROM test WHERE id != 0;

      返回结果:

      +------+--------+
      | id   | name   |
      +------+--------+
      |    1 | Edison |
      +------+--------+
    • 示例2:

      SELECT count(distinct name) FROM test;

      返回结果:

      +----------------------+
      | count(DISTINCT name) |
      +----------------------+
      |                    2 |
      +----------------------+
    • 示例3:

      SELECT * FROM
       (SELECT id, name FROM test WHERE id != 0) t0
       JOIN
       (SELECT id, name FROM test WHERE id != 2) t1
       ON t0.id=t1.id;
      +------+--------+------+--------+
      | id   | name   | id   | name   |
      +------+--------+------+--------+
      |    1 | Edison |    1 | Edison |
      +------+--------+------+--------+
  4. 删除表。

    DROP TABLE test;
  5. 删除数据库。

    DROP DATABASE etldemo;

访问宽表数据

ETL资源组中的Spark SQL连接可以查询宽表引擎中的数据,可以利用弹性的计算能力,在宽表的数据上完成比较复杂的查询计算。Spark SQL连接不支持宽表引擎的DDL语句,比如建表、删表等,可以查询宽表引擎中的数据。

宽表引擎数据存储在名为lindorm_tableCatalog中。访问宽表引擎中的数据,需显式执行SET CATALOG lindorm_table;切换至该Catalog中。

若您已有可使用的宽表,请直接进入下一步。若您尚未创建,请连接宽表引擎,参考以下语句创建宽表tb

-- 创建数据库
CREATE DATABASE test; 

--使用该数据库
USE test; 

--创建数据表,并插入两条数据
CREATE TABLE tb (id varchar, name varchar, address varchar,  primary key(id, name)) ; 
UPSERT INTO tb (id, name, address) values ('001', 'Jack',  'hz'); 
UPSERT INTO tb (id, name, address) values ('002', 'Edison',  'bj'); 

lindorm-beeline交互会话中,执行以下查询语句访问宽表数据。

  1. 显式切换数据源并使用数据库。

    -- 显式切换数据源
    SET CATALOG lindorm_table;
    
    -- 使用test数据库
    USE test;
  2. 查询宽表数据。

    示例1:

    SELECT * FROM tb LIMIT 5;

    返回结果:

    +------+--------+---------+
    | id   | name   | address |
    +------+--------+---------+
    | 001  | Jack   | hz      |
    | 002  | Edison | bj      |
    +------+--------+---------+

    示例2:

    SELECT count(*) FROM tb;

    返回结果:

    +-----------+
    | count(1)  |
    +-----------+
    | 2         |
    +-----------+