一般来说,业务上涉及到的数据导出包括表结构导出和表数据导出,通常用来进行数据备份或数据迁移。
一、表结构导出
StarRocks的元数据持久化在FE的BDB中,并不能直接访问或者导出,不过为了兼容MySQL协议,StarRocks在information_schema库下面也模拟了一部分,至少获取表结构信息是足够的。举一个场景,假设我们在StarRocks中的表非常多,我们希望将表中的字段名称、注释或类型等做成页面展示或者搜索,就可以直接去information_schema.columns表中去取相关的信息。
StarRocks目前还未支持批量导出建表语句,社区也有同学问起过该功能的排期,其实低调内涵的Astralidea老大(StarRocks研发)早就在git上分享了一款表结构导出工具:
GitHub - Astralidea/olapdb-toolhttps://github.com/Astralidea/olapdb-tool
工具介绍言简意赅:
OlapDb Tools
A set of Tools For OlapDb
olapdump - dump mysql/starrocks/doris table structure
olapdb-tool需要依赖Python3和PyMSQL,这两个工具的安装可以参考第3.0章:StarRocks SSB性能测试,按照咱们的安装方式,导出命令的语法为:
python3 olapdump.py [-h HOST] [-P PORT] [-u USER] [-p PASSWORD] [-d DATABASE]
例如:
python3 olapdump.py -h192.168.110.101 -P9030 -uroot -proot -dssb_1g > dump_ssb.sql
备注:Astralidea大在git上提到olapdb-tool需要安装argparse和pymysql,如果当前系统中已经有Python3,可以依次执行:python3 -> help() -> modules,在交互式命令行中查看已有的模块。
二、表数据导出
StarRocks中表数据的导出方式就比较丰富了,按数据读取方式的不同,可以大致分为以下四类:
读取方式 | 读取工具 | 数据去向 | 适用量级 |
Connector | Flink Connector、Spark Connector | 较灵活 | 较灵活[常用于ETL] |
Export/Backup | StarRocks Broker | HDFS、OSS、S3等 | 较灵活[常用于较大数据量的备份或迁移] |
JDBC | Flink、Spark、DataX(mysqlreader)等 | 较灵活 | GB级[效率不高] |
第三方可视化工具 | DBeaver、Navicat、SQLyog、Datagrip等 | 本地文件 | MB级[仅供测试] |
其中,JDBC我们肯定不陌生,在操作上也不复杂,将StarRocks视为MySQL来处理就可以,通常仅用于小数据量的数据,同时效率可能也不是很高。
需要注意的是,StarRocks目前还未支持使用SQL语句直接导出数据到本地,如果需要导出的数据量不大,可以使用第三方工具自带的导出功能,或者,借助mysql client导出,例如:
mysql -h192.168.110.101 -uroot -proot -P9030 -Ne "use loong;select * from car_status;" > /out/dump_car.csv
注意:使用JDBC SQL或者mysql client的方式时需要合理的调整StarRocks的查询超时时间。
从推荐程度上,表中前两项为官方提供的导出方式,最为推荐,也适用于较大量级的数据量。Flink Connector Source和DataX mysqlreader我们已经在导入部分的3.4章与3.5章中介绍过了,后面的章节,我们会主要介绍Export、Spark Connector以及Backup/Restore。