1、数据导入
2、数据迁移
1、Hive/Iceberg/Hudi等,可以使用Multi-Catalog来映射为外表,然后使用Insert Into,来将数据导入
2、可以从原来AP系统中到处数据为CSV等数据格式,然后再将导出的数据导入到Doris
3、可以使用 Spark / Flink 系统,利用AP系统的Connector来读取数据,然后调用Doris Connector写入Doris
4、SelectDB提供了免费的可视化的数据迁移工具X2Doris,目前支持了Apache Doris/Hive/Kudu、StarRocks数据库往Doris迁移的工作。
3、高并发小写入(Group Commit)
Group Commit不是一种新的导入方式,而是对INSERT INTO tbl VALUES(…)、Stream Load、Http Stream的扩展,大幅提升了高并发小写入的性能!
Group Commit 写入有三种模式,分别是:
关闭模式(off_mode)
不开启 Group Commit,保持以上三种导入方式的默认行为。
同步模式(sync_mode)
Doris根据负载和表的group_commit_interval属性将多个导入在一个事务提交,事务提交后导入返回。
这适用于高并发写入场景,且在导入完成后要求数据立即可见。
异步模式(async_mode)
Doris首先将数据写入WAL (Write Ahead Log),然后导入立即返回。
Doris会根据负载和表的group_commit_interval属性异步提交数据,提交之后数据可见。
为了防止WAL占用较大的磁盘空间,单次导入数据量较大时,会自动切换为sync_mode。
这适用于写入延迟敏感以及高频写入的场景。
4、数据导入事务与原子性保障
基本原理:
Doris导入任务中,BE会提交写入成功的Tablet ID到FE。
FE会根据tablet成功副本数判断导入是否成功,如果成功,该导入的事务被commit,导入数据可见。
如果失败,该导入的事务会被rollback,相应的tablet也会被清理。
Label机制:
Doris的导入作业都可以设置一个Label。这个Label通常是用户自定义的、具有一定业务逻辑属性的字符串。
Label的主要作用是唯一标识一个导入任务,并且能够保证相同的Label仅会被成功导入一次。
Label机制可以保证导入数据的不丢不重。如果上游数据源能够保证At-Least-Once语义,则配合Doris的Label机制,能够保证Exactly-Once语义。
Label在一个数据库下具有唯一性。Label的保留期限默认是3天。即3天后,已完成的Label会被自动清理,之后Label可以被重复使用。
5、导入过程数据转化
在导入过程中,Doris 支持对源数据进行一些变换,具体有:映射、转换、前置过滤和后置过滤。
映射:把源数据中的A列导入到目标表中的B列。
变换:以源数据中的列为参数,通过一个表达式计算出目标列中的值,表达式中支持自定义函数。
前置过滤:过滤源数据中的行,只导入符合过滤条件的行。
后置过滤:过滤结果中的行,只导入符合过滤条件的行。
6、数据导出方式
Doris 提供以下三种不同的数据导出方式:
SELECT INTO OUTFILE:支持任意SQL结果集的导出。
EXPORT:支持表级别的部分或全部数据导出。
MySQL DUMP:兼容mysql dump指令的数据导出。
7、作业调度
Doris Job Scheduler是一种基于预设计划运行的任务管理系统,
能够在特定时间点或按照指定时间间隔触发预定义操作,实现任务的自动化执行。