1 导入方式简介
2 入门示例
1 导入方式简介
为适配不同的数据导入需求,DorisDB 系统提供了5种不同的导入方式,以支持不同的数据源(如HDFS、Kafka、本地文件等),或者按不同的方式(异步或同步)导入数据。
- Broker Load
Broker Load 通过 Broker 进程访问并读取外部数据源,然后采用 MySQL 协议向 DorisDB 创建导入作业。
Broker Load适用于源数据在Broker进程可访问的存储系统(如HDFS)中,数据量为几十GB到上百GB。数据源有Hive等。
- Spark Load
Spark Load 通过外部的 Spark 资源实现对导入数据的预处理,提高 DorisDB 大数据量的导入性能并且节省 DorisDB 集群的计算资源。
Spark Load适用于初次迁移大数据量(可到TB级别)到DorisDB的场景,且源数据在Spark可访问存储系统(如HDFS)中。
- Stream Load
Stream Load是一种同步执行的导入方式。用户通过 HTTP 协议发送请求将本地文件或数据流导入到 DorisDB中,并等待系统返回导入的结果状态,从而判断导入是否成功。
Stream Load适用于导入本地文件,或通过程序导入数据流中的数据。数据源有Flink、CSV等。
- Routine Load
Routine Load(例行导入)提供了一种自动从指定数据源进行数据导入的功能。用户通过 MySQL 协议提交例行导入作业,生成一个常驻线程,不间断的从数据源(如 Kafka)中读取数据并导入到 DorisDB 中。
- Insert Into
类似 MySQL 中的 Insert 语句,DorisDB 提供 INSERT INTO tbl SELECT ...; 的方式从 DorisDB 的表中读取数据并导入到另一张表。或者通过 INSERT INTO tbl VALUES(...); 插入单条数据。数据源有DataX/DTS、Kettle/Informatic、DorisDB本身。
2 入门示例
- 示例1:以 "table1_20170707"为Label,使用本地文件table1_data导入table1表。
- 在本地创建数据文件able1_data,以\t作为数据之间的分隔符,具体内容如下:
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" http://127.0.0.1:8030/api/example_db/table1/_stream_load
注意:这里test是fe的IP地址,端口8030是fe.conf中配置的http port。
- 示例2: 以"table2_20170707"为Label,使用本地文件table2_data导入table2表。
在本地创建数据文件table2_data,以\t作为数据之间的分隔,具体内容如下:
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" 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
+--------+----------+----------+------+
- order by查询
示例:
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)
- 带有join的查询
示例:
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)
如果在DorisManager的编辑器中执行查询语句,可以查看Profile,Profile是BE执行后的结果,包含了每一个步骤的耗时和数据处理量等数据,可以通过DorisManager的图形界面看到可视化的Profile执行树。在DorisManager中执行查询,点击查询历史,就可看在“执行详情”tab中看到Profile的详细文本信息,在“执行时间”tab中能看到图形化的展示。详情见8.8 查询分析。
- 修改Schema
使用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:
mysql > ALTER TABLE table1 ADD COLUMN uv BIGINT SUM DEFAULT '0' after pv;
提交成功后,可以通过以下命令查看:
mysql > 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)
可以使用以下命令取消当前正在执行的作业:
mysql > CANCEL ALTER TABLE COLUMN FROM table1\G
- 创建Rollup
Rollup是DorisDB使用的一种新型预计算加速技术,可以理解为基于基础表构建的一个物化索引结构。物化是因为其数据在物理上独立存储,而索引的意思是,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:
mysql > ALTER TABLE table1 ADD ROLLUP rollup_city(citycode, pv);
提交成功后,可以通过以下命令查看:
mysql > 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)
可以使用以下命令取消当前正在执行的作业:
mysql > CANCEL ALTER TABLE ROLLUP FROM table1;
部分资料内容来源于网络 , 如侵权请联系博主删除!