为适配不同的数据导入需求,StarRocks 系统提供了5种不同的导入方式,以支持不同的数据源(如HDFS、Kafka、本地文件等),或者按不同的方式(异步或同步)导入数据。
Broker Load 通过 Broker 进程访问并读取外部数据源,然后采用 MySQL 协议向 StarRocks 创建导入作业。
Broker Load适用于源数据在Broker进程可访问的存储系统(如HDFS)中,数据量为几十GB到上百GB。数据源有Hive等。
Spark Load 通过外部的 Spark 资源实现对导入数据的预处理,提高 StarRocks 大数据量的导入性能并且节省 StarRocks 集群的计算资源。
Spark Load适用于初次迁移大数据量(可到TB级别)到StarRocks的场景,且源数据在Spark可访问的存储系统(如HDFS)中。
Stream Load是一种同步执行的导入方式。用户通过 HTTP 协议发送请求将本地文件或数据流导入到 StarRocks中,并等待系统返回导入的结果状态,从而判断导入是否成功。
Stream Load适用于导入本地文件,或通过程序导入数据流中的数据。数据源有Flink、CSV等。
Routine Load(例行导入)提供了一种自动从指定数据源进行数据导入的功能。用户通过 MySQL 协议提交例行导入作业,生成一个常驻线程,不间断的从数据源(如 Kafka)中读取数据并导入到 StarRocks 中。
类似 MySQL 中的 Insert 语句,StarRocks 提供 INSERT INTO tbl SELECT ...; 的方式从 StarRocks 的表中读取数据并导入到另一张表。或者通过 INSERT INTO tbl VALUES(...); 插入单条数据。数据源有DataX/DTS、Kettle/Informatic、StarRocks本身。
StarRocks数据导入整体生态图如下。
具体导入方式详情请参考数据导入。这里为了尽快导入测试数据,我们只介绍利用HTTP协议的Stream load方式导入。
1,1,jim,2
2,1,grace,2
3,2,tom,2
4,3,bush,3
5,3,helen,3
利用curl命令封装HTTP请求,完成数据的导入
curl --location-trusted -u test:123456 -T table1_data -H "label: table1_20170707" \
-H "column_separator:," \
http://127.0.0.1:8030/api/example_db/table1/_stream_load
注意:这里test是fe的用户名,端口8030是fe.conf中配置的http port。
在本地创建数据文件table2_data,以逗号作为数据之间的分隔,具体内容如下:
2017-07-03,1,1,jim,2
2017-07-05,2,1,grace,2
2017-07-12,3,2,tom,2
2017-07-15,4,3,bush,3
利用curl命令封装HTTP请求,完成数据的导入
curl --location-trusted -u test:123456 -T table2_data -H "label:table2_20170707" \
-H "column_separator:," \
http://127.0.0.1:8030/api/example_db/table2/_stream_load
示例:
mysql> select * from table1;
+--------+----------+----------+----+
| siteid | citycode | username | pv |
+--------+----------+----------+----+
| 5 | 3 | helen | 3 |
| 2 | 1 | grace | 2 |
| 1 | 1 | jim | 2 |
| 4 | 3 | bush | 3 |
| 3 | 2 | tom | 2 |
+--------+----------+----------+----+
示例:
mysql> select * from table1 order by citycode;
+--------+----------+----------+----+
| siteid | citycode | username | pv |
+--------+----------+----------+----+
| 2 | 1 | grace | 2 |
| 1 | 1 | jim | 2 |
| 3 | 2 | tom | 2 |
| 4 | 3 | bush | 3 |
| 5 | 3 | helen | 3 |
+--------+----------+----------+----+
5 rows in set (0.07 sec)
示例:
mysql> select sum(table1.pv) from table1 join table2 where table1.siteid = table2.siteid;
+--------------------+
| sum(`table1`.`pv`) |
+--------------------+
| 12 |
+--------------------+
1 row in set (0.20 sec)
示例:
mysql> select sum(pv) from table2 where siteid in (select siteid from table1 where siteid > 2);
+-----------+
| sum(`pv`) |
+-----------+
| 8 |
+-----------+
1 row in set (0.13 sec)
如果在StarRocksManager的编辑器中执行查询语句,可以查看Profile,Profile是BE执行后的结果,包含了每一个步骤的耗时和数据处理量等数据,可以通过StarRocksManager的图形界面看到可视化的Profile执行树。在StarRocksManager中执行查询,点击查询历史,就可看在“执行详情”tab中看到Profile的详细文本信息,在“执行时间”tab中能看到图形化的展示。详情见查询分析。
使用ALTER TABLE命令可以修改表的Schema,包括如下修改:
增加列
*
删除列
*
修改列类型
*
改变列顺序
以下举例说明。
原表table1的Schema如下:
+----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-------+---------+-------+
| siteid | int(11) | Yes | true | 10 | |
| citycode | smallint(6) | Yes | true | N/A | |
| username | varchar(32) | Yes | true | | |
| pv | bigint(20) | Yes | false | 0 | SUM |
+----------+-------------+------+-------+---------+-------+
我们新增一列uv,类型为BIGINT,聚合类型为SUM,默认值为0:
ALTER TABLE table1 ADD COLUMN uv BIGINT SUM DEFAULT '0' after pv;
提交成功后,可以通过以下命令查看:
SHOW ALTER TABLE COLUMN\G
当作业状态为FINISHED,则表示作业完成。新的Schema 已生效。
ALTER TABLE完成之后, 可以通过desc table查看最新的schema:
mysql> desc table1;
+----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-------+---------+-------+
| siteid | int(11) | Yes | true | 10 | |
| citycode | smallint(6) | Yes | true | N/A | |
| username | varchar(32) | Yes | true | | |
| pv | bigint(20) | Yes | false | 0 | SUM |
| uv | bigint(20) | Yes | false | 0 | SUM |
+----------+-------------+------+-------+---------+-------+
5 rows in set (0.00 sec)
可以使用以下命令取消当前正在执行的作业:
CANCEL ALTER TABLE COLUMN FROM table1\G
Rollup是StarRocks使用的一种新型预计算加速技术,可以理解为基于基础表构建的一个物化索引结构。物化是因为其数据在物理上独立存储,而索引的意思是,Rollup可以调整列顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。这里仅简单举例介绍,更多相关内容请参考相关章节。
原表table1的Schema如下:
+----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-------+---------+-------+
| siteid | int(11) | Yes | true | 10 | |
| citycode | smallint(6) | Yes | true | N/A | |
| username | varchar(32) | Yes | true | | |
| pv | bigint(20) | Yes | false | 0 | SUM |
| uv | bigint(20) | Yes | false | 0 | SUM |
+----------+-------------+------+-------+---------+-------+
对于table1明细数据是siteid, citycode, username三者构成一个key,从而对pv字段进行聚合;如果业务方经常有看城市pv总量的需求,可以建立一个只有citycode, pv的rollup:
ALTER TABLE table1 ADD ROLLUP rollup_city(citycode, pv);
提交成功后,可以通过以下命令查看:
SHOW ALTER TABLE ROLLUP\G
当作业状态为 FINISHED,则表示作业完成。
Rollup建立完成之后可以使用desc table1 all查看表的rollup信息:
mysql> desc table1 all;
+-------------+----------+-------------+------+-------+---------+-------+
| IndexName | Field | Type | Null | Key | Default | Extra |
+-------------+----------+-------------+------+-------+---------+-------+
| table1 | siteid | int(11) | Yes | true | 10 | |
| | citycode | smallint(6) | Yes | true | N/A | |
| | username | varchar(32) | Yes | true | | |
| | pv | bigint(20) | Yes | false | 0 | SUM |
| | uv | bigint(20) | Yes | false | 0 | SUM |
| | | | | | | |
| rollup_city | citycode | smallint(6) | Yes | true | N/A | |
| | pv | bigint(20) | Yes | false | 0 | SUM |
+-------------+----------+-------------+------+-------+---------+-------+
8 rows in set (0.01 sec)
可以使用以下命令取消当前正在执行的作业:
CANCEL ALTER TABLE ROLLUP FROM table1;
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://docs.starrocks.com/zh-cn/main/quick_start/Import_and_query
内容来源于网络,如有侵权,请联系作者删除!