Doris数据导入

一、常见的数据导入方式

  1. Stream Load(流式导入)
  2. Broker Load(文件导入)
  3. Routine Load(实时导入)
  4. INSERT语句(手动插入)
  5. 外部表(External Table)

二、各导入方式详解

1. Stream Load(流式导入)

特点:

  • 适用于小批量、实时的数据导入。
  • 通过HTTP接口直接向Doris FE节点发送数据。

操作流程:

  1. 准备数据文件(如CSV、JSON等)。
  2. 使用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等分布式存储导入。

操作流程:

  1. 准备数据文件并上传到外部存储(如HDFS)。
  2. 在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等消息队列导入。

操作流程:

  1. 配置Kafka等数据源。
  2. 在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等外部表。

操作流程:

  1. 创建外部表映射。
  2. 直接查询外部表数据。

SQL示例:

CREATE EXTERNAL TABLE ext_table (
    col1 INT,
    col2 STRING
)
ENGINE=HIVE
PROPERTIES (
    "database" = "hive_db",
    "table" = "hive_table"
);

三、数据导入常见问题及优化建议

  1. 导入速度慢:

    • 检查网络带宽、FE/BE节点负载。
    • 优化导入并发数、批量大小。
  2. 数据格式错误:

    • 确认分隔符、字段顺序、类型匹配。
    • 使用columns参数映射字段。
  3. 导入失败/中断:

    • 查看FE/BE日志,定位错误原因。
    • 合理设置max_filter_ratio,容忍部分数据异常。
  4. 数据去重/更新:

    • 利用Doris的主键模型或UNIQUE模型。

四、Doris数据导入操作细节

1. Stream Load实际操作细节

数据格式支持

  • 支持CSV、JSON、Parquet等主流格式。
  • 常见参数:
    • format: 数据格式(csv、json、parquet)
    • column_separator: 列分隔符,如,\t
    • columns: 指定映射字段,支持表达式

示例: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结果,包含NumberTotalRowsNumberLoadedRowsNumberFilteredRows等字段。
  • 可通过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参数指定解析路径。

停止与恢复

  • 任务可随时PAUSERESUME,方便维护。

五、常见问题处理

  1. 数据类型不匹配

    • 检查表结构与导入字段类型一致。
    • 可用CAST函数在columns参数中做类型转换。
  2. 主键冲突/去重失败

    • 确认表模型为UNIQUE或PRIMARY KEY。
    • 导入数据时保持主键唯一。
  3. 导入任务卡住

    • 检查FE/BE节点状态、磁盘空间。
    • 查看后台日志定位瓶颈。
  4. 性能瓶颈

    • 增加并发数,优化网络带宽。
    • 合理划分分区,提高导入效率。

六 、性能优化建议

  • 合理分区:表设计时按业务维度分区,大幅提升导入和查询性能。
  • 批量导入:尽量批量提交,减少导入次数。
  • 并发导入:利用多线程或Routine Load的并发能力。
  • 资源监控:实时监控FE/BE节点负载,避免资源瓶颈。
  • 数据预处理:提前清洗、去重,减少导入失败。

七、实战案例

场景一:每天定时批量导入日志

  1. 日志文件存储在HDFS。
  2. 每天凌晨1点使用Broker Load批量导入。
  3. 任务脚本示例:
    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"
    );
    

场景二:实时分析用户行为

  1. 用户行为数据实时写入Kafka。
  2. Doris Routine Load持续消费Kafka数据。
  3. 任务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"
    );
    

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值