本文介绍通过OLAP资源组访问湖模式列存数据、AP模式列存数据和宽表引擎数据的方法。相比宽表引擎自带的SQL功能,OLAP资源组提供更完整的SQL分析能力,适用于海量数据的高并发分析场景。
前提条件
已开通Lindorm宽表引擎。
已开通Lindorm计算引擎。
已将客户端IP地址添加至Lindorm白名单。
获取OLAP资源组连接地址并连接
登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理。
在实例详情页的配置信息区域,单击计算引擎操作列的资源组管理。
在资源组详情界面,选择已创建的状态&描述信息为运行中的OLAP资源组,将鼠标悬停在该OLAP资源组名称之上,获取OLAP资源组VPC内网连接地址,例如
jdbc:mysql://ld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com:9030。配置MySQL客户端后,通过JDBC连接OLAP资源组的VPC内网地址(需去掉末尾的冒号及端口号),并使用Lindorm宽表引擎的用户名和密码登录,即可通过MySQL协议连接到OLAP资源组。
mysql -hld-bp1dv48fk0yg0****-olap-proxy-ldps.lindorm.aliyuncs.com -P9030 -uroot -p执行以上语句后,可以看到MySQL命令行提示符,即可输入需要执行的SQL语句。
访问数据
OLAP资源组支持存算分离的计算形态,支持直接访问湖模式列存数据、AP模式列存数据和宽表引擎三种内部数据源,使用Catalog进行数据源区分。
可通过以下SQL语句实现数据源间的灵活切换:
切换至宽表数据源:
SET CATALOG lindorm_table;。切换至湖模式列存数据源:
SET CATALOG lindorm_columnar;。切换至AP模式列存数据源:
SET CATALOG default_catalog;。
执行切换操作后,可通过 SELECT catalog(); 查询当前连接的Catalog,有lindorm_table、lindorm_columnar 、default_catalog三种 Catalog。
访问宽表数据
Lindorm宽表引擎是面向海量结构化与半结构化数据设计的分布式存储系统,兼容HBase、Phoenix(SQL)、Cassandra等开源标准接口,支持单表百万亿级行数据存储、千万级并发访问、毫秒级响应,以及跨机房强一致容灾能力。其适用于元数据管理、订单账单、用户画像、社交图谱、日志分析等场景,可高效满足业务对大规模数据在线存储与实时查询的需求。
OLAP资源组支持连接至宽表引擎,通过独立计算资源和增强的查询能力,实现对宽表数据的实时分析。
使用语句SET CATALOG lindorm_table;连接到宽表引擎,连接到宽表引擎的 Catalog 之后,便可查看宽表引擎中的 Database 以及 Table了。相关语句示例如下:
--连接到宽表引擎
SET CATALOG lindorm_table;
-- 列出所有数据库
SHOW DATABASES;
-- 使用数据库
USE db01;
-- 列出所有表
SHOW TABLES;
-- 查询表
SELECT * FROM tb01 LIMIT 5;宽表引擎数据源使用限制:
不支持创建/删除 Database。
不支持创建/删除 Table,以及添加/删除列等 DDL 操作。
不支持插入/删除数据行,如 INSERT INTO/ DELETE FROM 等 DML 操作。
访问湖模式列存数据
湖模式列存数据兼容开源Iceberg,数据存储于Lindorm实例底层文件系统之中,同一实例中的OLAP资源组以及ETL资源组都共享同一份湖模式列存数据。
OLAP资源组连接后默认连接到湖模式列存数据,可使用SET CATALOG 语句切换到其它数据源之后,还可以再使用语句SET CATALOG lindorm_columnar;切换回湖模式列存数据。
湖模式列存数据中可以创建 Database 和 Table 并写入数据,相关语句示例如下:
-- 创建数据库
CREATE DATABASE db01;
-- 使用数据库
USE db01;
-- 创建表
CREATE TABLE test (id INT, name STRING) ENGINE = iceberg;
-- 插入数据
INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');
-- 将查询结果写入表中
INSERT INTO test SELECT * FROM test;
-- 删除表
DROP TABLE test;
-- 删除数据库
DROP DATABASE db01;OLAP资源组不支持CREATE TABLE AS SELECT语句,以及DELETE FROM语句。
访问AP模式列存数据
使用语句SET CATALOG default_catalog;切换到AP模式列存数据。数据表生命周期管理相关语句示例如下:
-- 切换 catalog
SET CATALOG default_catalog;
-- 创建数据库
CREATE DATABASE db01;
-- 使用数据库
USE db01;
-- 创建表
CREATE TABLE test (id INT, name STRING);
-- 插入数据
INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');
-- 将查询结果写入表中
INSERT INTO test SELECT * FROM test;
-- 删除表
DROP TABLE test;
-- 删除数据库
DROP DATABASE db01;更多详情可参考访问AP模式列存表。
通过宽表引擎使用OLAP资源组
OLAP资源组可作为宽表引擎的扩展查询引擎。您只需连接宽表引擎地址,通过在SQL中指定Hint,即可将复杂查询定向转发至OLAP资源组执行,无需单独连接OLAP资源组。这样,您既能利用宽表引擎的高并发查询能力,又能调用OLAP资源组的复杂分析能力,实现SQL语句的智能分发。
当通过MySQL或Lindorm-cli连接到Lindorm宽表引擎后,可使用Hint: _use_ldps_ 将特定SQL转发至OLAP资源组执行,例如:
-- 使用数据库
USE db01;
-- 将查询转发到默认OLAP资源组
SELECT /*+ _use_ldps_ */ * FROM tb01 LIMIT 5;
-- 将查询转发到指定 OLAP 资源组
SELECT /*+ _use_ldps_(olap_cg_name) */ * FROM tb01 LIMIT 5;Hint的格式是:/*+ _use_ldps_(olap_cg_name) */必须出现在最外层SELECT关键字的后面。其中(olap_cg_name)部分用来指定查询要转发到的OLAP资源组名称。如果未指定,则查询会被转发到默认资源组。
进阶用法
在转发至OLAP资源组时,可以指定查询语句执行时的会话变量,以便能精细化控制查询时的具体行为。指定变量的示例如下:
-- 指定查询的会话变量
SELECT /*+ _use_ldps_ */ /*+
SET_VAR(enable_lindorm_table_concurrent_scan = false) */ * FROM tb01
LIMIT 5;
-- 指定多个查询的会话变量
SELECT /*+ _use_ldps_ */ /*+
SET_VAR(enable_lindorm_table_concurrent_scan = false,
enable_build_join_filter_from_lindorm_table_in_opt = true) */ * FROM
tb01 LIMIT 5;指定会话变量的Hint格式为:/*+ SET_VAR(enable_lindorm_table_concurrent_scan = false) */,其中变量是以key = value方式指定,多个变量间可以用逗号分隔,具体支持的变量信息见下节。这个Hint的位置是接在上面转发OLAP资源组的Hint之后,不能与转发Hint共用一个注释块。
指定会话Hint的位置是接在转发OLAP资源组的Hint之后,不能与转发Hint共用一个注释块。
参数说明
变量 | 类型 | 默认值 | 说明 |
enable_build_join_filter_from_lindorm_table_in_opt | BOOL | FALSE | 在对宽表引擎中两表进行JOIN关联时,可以根据右表的查询结果,生成左表的过滤条件并下推,以加速左表数据扫描过程。 |
enable_lindorm_table_concurrent_scan | BOOL | TRUE | 该参数控制读取Lindorm宽表的并发行为。配置为TRUE时,则以多并发方式扫描宽表;配置为FALSE时,则以单并发方式扫描宽表。 |