跳到主要内容
版本:26.x

导入概览

Apache Doris 提供了多种数据导入与集成方式,帮助您从不同数据源将数据写入数据库。本篇文档从典型业务场景出发,介绍如何在 实时写入流式同步批量导入外部数据源集成 四类方式中选择最合适的方案。

快速导航

按照数据来源与时效性需求,可以参考下表快速定位推荐的导入方式:

业务场景数据来源推荐导入方式
应用程序实时写入(极少量、5 分钟级)JDBC 客户端JDBC INSERT
应用程序高并发或高频小批量写入JDBC / HTTPGroup Commit + JDBC INSERT 或 Stream Load
应用程序高吞吐写入HTTPStream Load
实时数据流接入FlinkFlink Doris Connector
实时消息队列接入KafkaRoutine Load 或 Doris Kafka Connector
事务数据库实时同步(无需外部组件)MySQL / PostgreSQLStreaming Job 持续导入
事务数据库 CDC 同步MySQL / PostgreSQL 等Flink CDC 或 DataX
对象存储持续导入(增量文件自动加载)S3Streaming Job 持续导入
对象存储 / HDFS 文件批量导入S3 / OSS / HDFSBroker LoadINSERT INTO SELECT
本地文件批量导入本地磁盘Stream Load 或 Doris Streamloader
外部数据源(数据湖/外部表)查询并导入Hive / Iceberg / JDBC 等Catalog + INSERT INTO SELECT

Doris 的每次导入默认都是一个隐式事务,事务相关的更多信息请参考事务

按场景选择导入方式

实时写入:应用程序直接写入

适用于应用程序通过 HTTP 或 JDBC 实时写入 数据到 Doris 表的场景,常用于需要实时分析和查询的业务。

  • 极少量数据(约 5 分钟一次):使用 JDBC INSERT 写入数据。
  • 高并发或高频次(大于 20 并发,或 1 分钟内多次写入):建议开启 Group Commit,配合 JDBC INSERT 或 Stream Load 使用。
  • 高吞吐写入:推荐使用 Stream Load 通过 HTTP 协议写入。

流式同步:实时数据流接入

适用于通过实时数据流(如 Flink、Kafka、事务数据库 CDC)将数据持续同步到 Doris 表的场景。

  1. Flink 实时数据流

    使用 Flink Doris Connector 将 Flink 的实时数据流写入到 Doris 表中。

  2. Kafka 实时数据流

    可选 Routine Load 或 Doris Kafka Connector,二者差异如下:

    方式数据流向支持格式
    Routine LoadDoris 主动从 Kafka 拉取数据csv、json
    Kafka ConnectorKafka 主动将数据写入 Dorisavro、json、csv、protobuf
  3. 事务数据库 CDC 同步

    可使用 Flink CDC 或 DataX 将事务数据库的 CDC 数据流写入到 Doris 中。

  4. Streaming Job 持续导入(无需外部组件)

    通过 Doris 内置的 Streaming Job 直接从 MySQL、PostgreSQL、S3 等数据源持续读取数据并写入 Doris,无需依赖 Flink、Kafka 等外部组件。支持两种同步方式:

    同步方式底层机制自动建表语义保证典型场景
    SQL 映射同步Job + TVF(INSERT INTO SELECT)需预建exactly-once需要列裁剪、字段重命名、类型转换、条件过滤
    自动建表同步Job + 原生整库 DDL首次自动创建at-least-once整库或一组表的镜像复制,下游表结构自动跟随上游

批量导入:外部存储文件加载

适用于将外部存储系统(如对象存储、HDFS、本地文件、NAS)中的文件 批量加载 到 Doris 表的非实时场景。

  • 对象存储 / HDFS 文件:使用 Broker Load 写入到 Doris 中。
  • 对象存储 / HDFS / NAS 文件(同步或异步):使用 INSERT INTO SELECT 同步写入;如需异步执行,可配合 JOB 调度。
  • 本地文件:使用 Stream Load 或 Doris Streamloader 写入到 Doris 中。

外部数据源集成:Catalog 联邦查询与导入

适用于通过与外部数据源(如 Hive、JDBC、Iceberg 等)集成,对外部数据进行查询并 按需导入 到 Doris 表的场景。

  • 通过创建 Catalog 读取外部数据源中的数据。
  • 使用 INSERT INTO SELECT 将外部数据源数据同步写入 Doris;如需异步执行,可配合 JOB 调度。

导入时进行部分列更新

Doris 支持在数据导入时进行 部分列更新,允许您只更新表中的特定列,而不需要提供所有列的值。该能力对以下场景特别有用:

  • 更新宽表中的少量字段
  • 执行增量更新(Upsert 部分列)

关于如何对主键模型和聚合模型表进行部分列更新的详细信息,请参考列更新

导入方式总览

Doris 的导入主要涉及数据源、数据格式、导入方式、错误数据处理、数据转换、事务等多个方面。下表汇总了各导入方式适合的场景、支持的文件格式以及导入模式:

导入方式使用场景支持的文件格式导入模式
Stream Load导入本地文件或者应用程序写入csv、json、parquet、orc同步
Broker Load从对象存储、HDFS 等导入csv、json、parquet、orc异步
INSERT INTO VALUES通过 JDBC 等接口导入SQL同步
INSERT INTO SELECT可以导入外部表或者对象存储、HDFS 中的文件SQL同步
Routine Load从 Kafka 实时导入csv、json异步
MySQL Load从本地数据导入csv同步
Group Commit高频小批量导入根据使用的导入方式而定-
Streaming Job从 MySQL、PostgreSQL、S3 等数据源持续导入取决于数据源异步

常见问题

Q1:高并发小批量写入应该选择哪种导入方式?

建议开启 Group Commit,并配合 JDBC INSERT 或 Stream Load 使用。当并发大于 20,或 1 分钟内写入多次时,Group Commit 可显著降低导入压力。

Q2:Routine Load 与 Doris Kafka Connector 有何区别?

  • Routine Load:由 Doris 调度任务从 Kafka 主动拉取 数据,支持 csv、json 格式。
  • Doris Kafka Connector:由 Kafka 将数据 主动推送 到 Doris,支持 avro、json、csv、protobuf 格式。

Q3:如何将本地文件导入到 Doris?

可以使用 Stream Load(适合中小文件)或 Doris Streamloader(适合大文件批量场景)。

Q4:能否将 Hive、Iceberg 等外部数据源的数据导入 Doris?

可以。先通过 Catalog 接入外部数据源,再使用 INSERT INTO SELECT 将数据同步写入 Doris;若需要异步执行,可结合 JOB 调度。

Q5:导入是否具备事务保证?

是。Doris 的每次导入默认都是一个隐式事务,详细内容请参考事务

Q6:Streaming Job 与 Flink CDC 该如何选择?

  • Streaming Job:Doris 内置能力,无需依赖 Flink、Kafka 等外部组件,支持 MySQL、PostgreSQL 的 SQL 映射 / 自动建表同步以及 S3 持续导入。自动建表同步会在首次同步时自动建表,SQL 映射同步提供 exactly-once 语义并支持 SQL 加工。
  • Flink CDC:需要部署 Flink 集群,适合已有 Flink 流处理体系、需要复杂 ETL 加工或多端同步的场景。

如果只是把 MySQL/PostgreSQL 数据持续同步到 Doris,且无外部流处理需求,优先选择 Streaming Job,详见 持续导入概览