一、常见的数据导入方式
- Stream Load(流式导入)
- Broker Load(文件导入)
- Routine Load(实时导入)
- INSERT语句(手动插入)
- 外部表(External Table)
二、各导入方式详解
1. Stream Load(流式导入)
特点:
- 适用于小批量、实时的数据导入。
- 通过HTTP接口直接向Doris FE节点发送数据。
操作流程:
- 准备数据文件(如CSV、JSON等)。
- 使用curl或其他HTTP工具发送导入请求。
示例命令:
curl --location-trusted -u user:password -H "format: csv" -T data.csv http://fe_host:8030/api/db_name/table_name/_stream_load
常用参数:
- format: 数据格式(csv, json, etc)
- column_separator: 列分隔符
- columns: 指定导入字段
- max_filter_ratio: 最大过滤比例
注意事项:
- 单次导入数据量有限制(默认100MB)。
- 适合实时性要求高的场景。
2. Broker Load(文件导入)
特点:
- 适合大批量数据导入。
- 支持从HDFS、S3等分布式存储导入。
操作流程:
- 准备数据文件并上传到外部存储(如HDFS)。
- 在Doris中执行LOAD命令。
SQL示例:
LOAD LABEL db_name.label_name (
DATA INFILE("hdfs://host:port/path/to/data.csv")
INTO TABLE table_name
COLUMNS TERMINATED BY ','
(col1, col2, col3)
)
WITH BROKER 'broker_name'
(
"username"="hdfs_user",
"password"="hdfs_password"
);
常用参数:
- DATA INFILE: 数据文件路径
- COLUMNS TERMINATED BY: 列分隔符
- BROKER: 指定broker及认证信息
注意事项:
- 支持断点续传、重试。
- 适合离线批量导入场景。
3. Routine Load(实时导入)
特点:
- 自动化持续导入,适合流式数据。
- 支持从Kafka等消息队列导入。
操作流程:
- 配置Kafka等数据源。
- 在Doris中创建Routine Load任务。
SQL示例:
CREATE ROUTINE LOAD db_name.job_name ON table_name
COLUMNS (col1, col2, col3)
PROPERTIES
(
"desired_concurrent_number"="3",
"max_batch_rows"="50000",
"max_batch_interval"="20"
)
FROM KAFKA
(
"kafka_broker_list"="host:port",
"kafka_topic"="topic_name",
"property.group.id"="group_id"
);
常用参数:
- desired_concurrent_number: 并发任务数
- max_batch_rows: 每批最大行数
- kafka相关配置
注意事项:
- 适合实时数据同步场景。
- 可自动断点续传、容错。
4. INSERT语句(手动插入)
特点:
- 适合小量数据插入或测试。
- 直接通过SQL语句插入数据。
SQL示例:
INSERT INTO table_name (col1, col2) VALUES (1, 'abc'), (2, 'def');
注意事项:
- 不适合大批量数据。
5. 外部表(External Table)
特点:
- 直接查询外部存储的数据,无需导入。
- 支持Hive、Iceberg等外部表。
操作流程:
- 创建外部表映射。
- 直接查询外部表数据。
SQL示例:
CREATE EXTERNAL TABLE ext_table (
col1 INT,
col2 STRING
)
ENGINE=HIVE
PROPERTIES (
"database" = "hive_db",
"table" = "hive_table"
);
三、数据导入常见问题及优化建议
-
导入速度慢:
- 检查网络带宽、FE/BE节点负载。
- 优化导入并发数、批量大小。
-
数据格式错误:
- 确认分隔符、字段顺序、类型匹配。
- 使用columns参数映射字段。
-
导入失败/中断:
- 查看FE/BE日志,定位错误原因。
- 合理设置max_filter_ratio,容忍部分数据异常。
-
数据去重/更新:
- 利用Doris的主键模型或UNIQUE模型。
四、Doris数据导入操作细节
1. Stream Load实际操作细节
数据格式支持
- 支持CSV、JSON、Parquet等主流格式。
- 常见参数:
format: 数据格式(csv、json、parquet)column_separator: 列分隔符,如,或\tcolumns: 指定映射字段,支持表达式
示例:JSON格式导入
curl --location-trusted -u user:password \
-H "format: json" \
-T data.json \
http://fe_host:8030/api/db_name/table_name/_stream_load
导入结果查看
- 成功后返回JSON结果,包含
NumberTotalRows、NumberLoadedRows、NumberFilteredRows等字段。 - 可通过Doris前端管理页面或SQL查询
SHOW LOAD查看任务状态。
2. Broker Load常用技巧
多文件导入
LOAD LABEL db_name.label_name (
DATA INFILE("hdfs://host:port/path1/*.csv", "hdfs://host:port/path2/*.csv")
INTO TABLE table_name
COLUMNS TERMINATED BY ','
(col1, col2, col3)
)
WITH BROKER 'broker_name' (
"username"="hdfs_user",
"password"="hdfs_password"
);
错误容忍
max_filter_ratio:允许错误行比例,默认0。- 建议根据数据质量适当调整。
监控与恢复
- 导入任务失败时,可用
SHOW LOAD查看详情。 - 可用
CANCEL LOAD取消异常任务。
3. Routine Load高级配置
动态调整并发数
desired_concurrent_number可动态调整,提高吞吐量。- 监控任务状态,合理分配资源。
数据解析
- 支持复杂JSON、嵌套格式解析。
- 可用
json_paths参数指定解析路径。
停止与恢复
- 任务可随时
PAUSE、RESUME,方便维护。
五、常见问题处理
-
数据类型不匹配
- 检查表结构与导入字段类型一致。
- 可用
CAST函数在columns参数中做类型转换。
-
主键冲突/去重失败
- 确认表模型为UNIQUE或PRIMARY KEY。
- 导入数据时保持主键唯一。
-
导入任务卡住
- 检查FE/BE节点状态、磁盘空间。
- 查看后台日志定位瓶颈。
-
性能瓶颈
- 增加并发数,优化网络带宽。
- 合理划分分区,提高导入效率。
六 、性能优化建议
- 合理分区:表设计时按业务维度分区,大幅提升导入和查询性能。
- 批量导入:尽量批量提交,减少导入次数。
- 并发导入:利用多线程或Routine Load的并发能力。
- 资源监控:实时监控FE/BE节点负载,避免资源瓶颈。
- 数据预处理:提前清洗、去重,减少导入失败。
七、实战案例
场景一:每天定时批量导入日志
- 日志文件存储在HDFS。
- 每天凌晨1点使用Broker Load批量导入。
- 任务脚本示例:
LOAD LABEL log_db.daily_20240510 ( DATA INFILE("hdfs://hdfs_host/logs/20240510/*.log") INTO TABLE log_table COLUMNS TERMINATED BY '\t' (log_time, user_id, action) ) WITH BROKER 'hdfs_broker' ( "username"="hdfs_user", "password"="hdfs_pass" );
场景二:实时分析用户行为
- 用户行为数据实时写入Kafka。
- Doris Routine Load持续消费Kafka数据。
- 任务SQL示例:
CREATE ROUTINE LOAD user_db.user_behavior_load ON behavior_table COLUMNS (event_time, user_id, event_type) PROPERTIES ( "desired_concurrent_number"="5", "max_batch_rows"="100000" ) FROM KAFKA ( "kafka_broker_list"="kafka1:9092,kafka2:9092", "kafka_topic"="user_behavior" );
1565






