跳到主要内容
跳到主要内容

导入概览

导入方案介绍

本节对导入方案做一个总体介绍,以便大家根据数据源、文件格式、数据量等选择最合适的导入方案。

Doris支持的导入方式包括Stream Load、Broker Load、Insert Into、Routine Load、 MySQL Load。除了直接使用Doris原生的导入方式进行导入,Doris还提供了一系列的生态工具帮助用户进行数据导入,包括Spark Doris Connector、Flink Doris Connector、Doris Kafka Connector、DataX Doriswriter、Doris Streamloader等。

针对高频小导入场景,Doris还提供了Group Commit功能。Group Commit 不是一种新的导入方式,而是对INSERT INTO VALUES、Stream Load、Http Stream的扩展,对小导入在服务端进行攒批。

每种导入方式和生态工具适用的场景不一样,支持的数据源、文件格式也有差异。

导入方式

导入方式使用场景支持的文件格式单次导入数据量导入模式
Stream Load从本地数据导入csv、json、parquet、orc小于10GB同步
Broker Load从对象存储、HDFS等导入csv、json、parquet、orc数十GB到数百 GB异步
INSERT INTO VALUES

单条或小批量据量导入

通过JDBC等接口导入

SQL简单测试用同步
INSERT INTO SELECT

Doris内部表之间数据导入

外部表导入

SQL根据内存大小而定同步
Routine Load从kakfa实时导入csv、json微批导入 MB 到 GB异步
MySQL Load从本地数据导入csv小于10GB同步
Group Commit高频小批量导入根据使用的导入方式而定微批导入KB-

生态工具

生态工具使用场景
Spark Doris Connector从spark批量导入数据
Flink Doris Connector从flink实时导入数据
Doris Kafka Connector从kafaka实时导入数据
DataX Doriswriter从MySQL、Oracle、SqlServer、Postgre、Hive、ADS等同步数据
Doris Streamloader实现了 Stream Load 的多并发导入,一次导入可以同时导入多个文件及目录
X2Doris从其他AP数据库迁移数据到Doris

文件格式

文件格式支持的导入方式支持的压缩格式
csvStream Load、Broker Load、MySQL Loadgz, lzo, bz2, lz4, LZ4FRAME,lzop, deflate
jsonStream Load、Broker Load不支持
parquetStream Load、Broker Load不支持
orcStream Load、Broker Load不支持

数据源

数据源支持的导入方式
本地数据

Stream Load

StreamLoader

MySQL load

对象存储

Broker Load

INSERT TO SELECT FROM S3 TVF

HDFS

Broker Load

INSERT TO SELECT FROM HDFS TVF

Kafka

Routine Load

Kakfa Doris Connector

FlinkFlink Doris Connector
SparkSpark Doris Connector
Mysql、PostgreSQL,Oracle,SQLServer等TP数据库

通过外表导入

Flink Doris Connector

其他AP数据库

X2Doris

通过外表导入

Spark/Flink Doris Connector

概念介绍

本节主要对导入相关的一些概念进行介绍,以帮助大家更好的使用数据导入功能。

原子性

Doris 中所有导入任务都是原子性的,即一个导入作业要么全部成功,要么全部失败,不会出现仅部分数据导入成功的情况,并且在同一个导入任务中对多张表的导入也能够保证原子性。对于简单的导入任务,用户无需做额外配置或操作。对于表所附属的物化视图,也同时保证和基表的原子性和一致性。

标签机制

Doris 的导入作业都可以设置一个 Label。这个 Label 通常是用户自定义的、具有一定业务逻辑属性的字符串,如果用户不指定,系统也会自动生成一个。Label 的主要作用是唯一标识一个导入任务,并且能够保证相同的 Label 仅会被成功导入一次。

Label 是用于保证对应的导入作业,仅能成功导入一次。一个被成功导入的 Label,再次使用时,会被拒绝并报错 Label already used。通过这个机制,可以在 Doris 侧做到 At-Most-Once 语义。如果结合上游系统的 At-Least-Once 语义,则可以实现导入数据的 Exactly-Once 语义。

导入模式

导入模式分为同步导入和异步导入。对于同步导入方式,返回结果即表示导入成功还是失败。而对于异步导入方式,返回成功仅代表作业提交成功,不代表数据导入成功,需要使用对应的命令查看导入作业的运行状态。

数据转化

在向表中导入数据时,有时候表中的内容与源数据文件中的内容不完全一致,需要对数据进行变换才行。Doris支持在导入过程中直接对源数据进行一些变换。具体有:映射、转换、前置过滤和后置过滤。

错误数据处理

在导入过程中,原始列跟目标列的数据类型可能不完全一致,导入时会对数据类型不一致的原始列值进行转换。转换过程中可能会发生字段类型不匹配、字段超长等转换失败的情况。严格模式用于控制导入过程中是否会对这些转换失败的错误数据行进行过滤。

最小写入副本数

默认情况下,数据导入要求至少有超过半数的副本写入成功,导入才算成功。然而,这种方式不够灵活,在某些场景会带来不便。Doris 允许用户设置最小写入副本数 (Min Load Replica Num)。对导入数据任务,当它成功写入的副本数大于或等于最小写入副本数时,导入即成功。