本文介绍了通过ETL资源组访问Lindorm宽表引擎和列存数据的方法,包括环境配置、数据源切换、数据操作等步骤。
前提条件
已安装Java环境,要求安装JDK 1.8及以上版本。
已开通Lindorm宽表引擎。
已开通Lindorm计算引擎。
已将客户端IP地址添加至Lindorm白名单。
已开通ETL资源组。
注意事项
如果应用部署在ECS实例,通过专有网络访问Lindorm实例前,需要确保Lindorm实例和ECS实例满足以下条件,以保证网络的连通性。
所在地域相同,并建议所在可用区相同(以减少网络延时)。
ECS实例与Lindorm实例属于同一专有网络。
步骤一:连接ETL资源组
下载Spark发布包。
解压Spark发布包。
使用解压后的路径设置SPARK_HOME环境变量。
export SPARK_HOME=/path/to/spark/;
填写配置文件:
$SPARK_HOME/conf/beeline.conf
。进入
$SPARK_HOME/bin
目录并运行./beeline
命令进入交互会话。在交互会话中输入SQL语句,执行写入或查询操作。
步骤二:访问数据
ETL资源组支持访问两种Catalog(用于标识不同的数据源):lindorm_columnar
(列存数据源)和lindorm_table
(宽表数据源),默认连接的Catalog为 lindorm_columnar
,其决定了直接执行的SQL操作所作用的数据源。
您可通过以下SQL语句实现列存与宽表数据源的灵活切换:
切换至列存数据源:
USE lindorm_columnar;
。切换至宽表数据源:
USE lindorm_table;
。
访问列存数据
列存数据采用兼容Apache Iceberg规范的开放数据湖格式,物理存储于Lindorm实例底层分布式文件系统。该存储架构支持多类型资源组共享访问,同一Lindorm实例中的OLAP资源组与ETL资源组均可直接访问该列式存储数据。
创建并使用数据库。
-- 创建数据库 CREATE DATABASE etldemo; -- 使用该数据库 USE etldemo;
创建数据表并写入数据。
-- 创建表 CREATE TABLE test (id INT, name STRING) -- 插入数据 INSERT INTO test VALUES (0, 'Jay'), (1, 'Edison');
查询数据。
示例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 | +------+--------+------+--------+
将查询结果写入表中。
INSERT INTO test SELECT * FROM test;
删除表。
DROP TABLE test PURGE;
删除数据库。
DROP DATABASE etldemo;
访问宽表数据
ETL资源组支持连接至宽表引擎,通过独立计算资源和增强的查询能力,实现对宽表数据的实时分析。
宽表引擎数据存储在名为lindorm_table
的Catalog中。访问宽表引擎中的数据,需显式执行USE lindorm_table;
切换至该Catalog中。
若您已有可使用的宽表,请直接进入下一步。若您尚未创建,请连接并使用宽表引擎,参考以下语句创建宽表测试数据库和测试表。
-- 创建数据库
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交互会话中,执行以下查询语句访问宽表数据。
显式切换数据源并使用数据库。
-- 显式切换数据源 USE lindorm_table; -- 使用test数据库 USE test;
查询宽表数据。
示例1:
SELECT * FROM tb LIMIT 5;
返回结果:
+------+--------+---------+ | id | name | address | +------+--------+---------+ | 001 | Jack | hz | | 002 | Edison | bj | +------+--------+---------+
示例2:
SELECT count(*) FROM tb;
返回结果:
+-----------+ | count(1) | +-----------+ | 2 | +-----------+
相关文档
您也可以在JAR作业和Python作业中通过Spark SQL或JDBC的方式访问Lindorm列存和宽表数据进行数据分析,详细介绍请参考参见以下文档: