Doris使用中,频繁用到的命令


不知道你们在使用Doris的时候,有没有这种感觉,那就是虽然我知道它的功能很强大,然后呢,也会去使用一些能满足业务场景的功能。


但是在使用时,因为功能很强大,导致每个功能都有很多相关的命令,但是呢,这些命令之间,很多时候没有较强的相通性。


比如在进行数据导入时,不同的导入方式,导入命令却不一样,而且查看其导入状态的方式也不一样。


类似的这种查看各种Doris相关状态的命令,虽然在官方文档里都能找到,但都散落在各个不同的章节和角落里,在使用时,需要通过关键字来搜索,才知道一些命令怎么用,而且如果你对Doris不是很熟的话,甚至都不知道有这些命令,因此很不方便。

要吐槽一点的就是:


Doris的这个连接客户端(mysql客户端)比较难用,主要原因在于几乎没有命令提示功能,无法通过tab键进行命令补全,这一点相比clickhouse的客户端,弱爆了。

那么今天这篇文章,就根据我这段时间以来对Doris的使用经验,来汇总一下,在使用过程中,那些对你有用的状态查看命令。



0. 查看集群的状态


当一个Doris集群部署完成,如果想要知道当前集群的一些运行状态,可以通过如下命令来查看。


0.1 查看master(FE)的运行状态


show frontends\G;



会显示当前集群有多少个FE,以及其角色状态,还有其他相关信息。


0.2 查看slaver(be)的运行状态


show backends\G;




0.3 集群增加主节点


ALTER SYSTEM ADD FOLLOWER "follower_host:edit_log_port";

添加follow角色

ALTER SYSTEM ADD OBSERVER "observer_host:edit_log_port";

添加observer角色


运行这个命令后,再配置好并启动FE节点,才能将新的主节点加入到集群中。


0.4 集群增加从节点


ALTER SYSTEM ADD BACKEND "be_host:be_heartbeat_service_port";


同样,运行这个命令后,再配置好并启动BE节点,才能将新的从节点加入到集群中。


0.5 查看集群中每张表的存储占用状态


show data;



可以看到每张表的存储占用空间,以及每张表当前创建了多少分片,可以看到表dns_logs01,虽然是空表,但是在建表的时候因为指定了分桶数量为5,且其默认副本数量为3。


因此即便没有数据,它也占用了15个分片。


同时也可以看出来,当前集群的存储磁盘配额为1024TB(1P),才用了96GB,空间还剩非常多。


0.6 查看单张表在集群的存储分布情况


ADMIN SHOW REPLICA DISTRIBUTION FROM db_name.table_name;



可以知道每张表在每台BE中的数据存储比例,以及是否有存储的倾斜。



1. 导入数据的相关命令


我们知道,Doris提供了多种数据导入方式,而且呢,很多导入方式都是异步进行的,也就是你的导入命令一执行,“啪”,就返回了。


于是对于其导入状态:正在导、导完成了、还是失败了呢,你还得通过导入状态查看命令来查。


1.1 routine load导入方式


这个导入方式很有意思,官方文档说目前就支持kafka一种数据源,其导入命令是这样式的:



官方文档给这个load起名的时候还给带了个库名example_db,其实在真正使用时是不需要的,麻烦,就test1就行。


当然,如果你忘记了当初创建的load叫什么,也可以这么查看:

show routine load\G;



这样一来,就把所有的的通过routine load的历史记录给查询出来了。


如果你记得具体的load任务名,那就最好了,那就用这个命令。

show routine load for test4\G;


如果想暂停导入任务:

pause routine load FOR test4;\G;


想再次启动:

resume routine load FOR test4;\G;


直接停掉,不再导入:

stop routine load FOR test4;\G;


而stop之后,就不能再次恢复。


1.2 stream load导入方式


这种导入方式是同步的,因此就没有提供导入进度的命令查看方式,而且呢,官网给的导入样例主要是通过crul命令行的方式来进行(也可以通过http client方式)。



虽然官方给的例子都是用来导入单个文件的数据,且单个文件不能太大(因为默认10分钟就会超时)。


但是,从上两篇我写的关于Doris的文章内容我们知道,当我们用spark的streaming方式或者flink的steaming方式去写Doris表的时候,其写入的逻辑实现方式本质也是这个stream load。


1.3 其他导入方式


Doris还是提供了其他的一些导入方式,比如broker导入,MySQL load等,暂时没有用过。



2.  物化视图的状态查看


Doris的物化视图其特殊之处在于,它是一种“依附”在基础表之上的,将原本查基础表耗时较久的操作,给提前把结果算出来准备好的一种机制。


因为创建物化视图本质上,是一个数据重新计算与写入的操作,因此对于一个本来就有数据的基础表来说,这个物化视图的创建过程就是耗时的,所以,它被设计成了一个异步操作。


2.1 查看物化视图(或rollup)创建的进度


命令有两种。


可以这么写:

show alter table rollup;

也可以这么写:

show alter table materialized view;


不管你实际创建的是rollup还是materialized view,查询出来的结果都一样,以上命令会把所有历史的、以及正在创建的结果都展现出来。


如果怕查询出来的结果太多,查询条件可以精确到具体的库名以及表名:

show alter table materialized view from example_db where TableName='table_name';




等你确认物化视图(或者rollup)创建成功之后(FINISHED),就可以在你的基础表中看到了(在FINISHED之前是看不到的,也不生效)。


2.2 确认物化视图(或rollup)已经生效


desc dns_logs_from_kafka all;


输出结果:



这些输出的rollup或者物化视图名字,代表已经创建成功(数据计算和写入完毕),可以起到查询加速的作用。


2.3 删除物化视图(以及rollup)


物化视图跟rollup虽然在查看的时候用的命令是一样的,但是删除时候又不一样了(因为创建的时候命令不一样)。


删除rollup:

ALTER TABLE db_name.table_name DROP ROLLUP rollup_name;


删除物化视图:

drop materialized view view_name on table_name;


撤销正在创建的rollup(此时数据还在写入rollup):

CANCEL ALTER TABLE ROLLUP FROM db_name.table_name;



3.  索引创建进度的查看


我们知道,Doris除了原本内置的索引外(指定的排序字段),还可以额外指定几个少数的用户级索引,比如Bitmap索引,以及BloomFilter(2.0版本之后还会支持更多)。


3.1 查看某张表的索引情况(创建成功之后):


show index from table_name;




但是要知道,创建索引是需要时间的(同样需要重新计算和写入数据),而如果索引正在创建中呢。


3.2 查看正在创建的(所有表)索引(或修改的字段):


SHOW ALTER TABLE COLUMN\G;



这个时候,所有跟字段修改有关的操作都会被查询出来,包括用户索引的创建。


3.3 查看具体某张表的索引(或正在修改的字段)创建情况:


SHOW ALTER TABLE COLUMN WHERE TableName = "table_name"


3.4 取消正在创建的索引(或正在修改的字段):


CANCEL ALTER TABLE COLUMN FROM table_name;



以上,算是最近这段时间以来使用Doris过程中,一些比较趁手的辅助开发的命令,觉得有必要记录下来,




你可以添加我的私人微信,拉你入技术讨论群,跟一群热爱技术的小伙伴一起成长...


请使用浏览器的分享功能分享到微信等