Apache Doris 入门教程16:数据导入之S3 Load

Doris从0.14版开始支持通过S3协议直接导入数据,如AWSS3、BOS、OSS和COS等。用户需要准备AK、SK、REGION和ENDPOINT信息。导入过程类似BrokerLoad,通过WITHS3语句指定存储配置。对于不支持virtual-hostedstyle的对象存储,可使用pathstyle。1.2版本后,还支持使用临时秘钥访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S3 Load

从0.14 版本开始,Doris 支持通过 S3 协议直接从支持 S3 协议的在线存储系统导入数据。

本文档主要介绍如何导入 AWS S3 中存储的数据。也支持导入其他支持 S3 协议的对象存储系统导入,如百度云的 BOS、阿里云的OSS和腾讯云的 COS 等。

适用场景

  • 源数据在 支持 S3 协议的存储系统中,如 S3,BOS 等。
  • 数据量在 几十到百 GB 级别。

准备工作

  1. 准备AK 和 SK 首先需要找到或者重新生成 AWS Access keys,可以在 AWS console 的 My Security Credentials 找到生成方式, 如下图所示: AK_SK 选择 Create New Access Key 注意保存生成 AK和SK.
  2. 准备 REGION 和 ENDPOINT REGION 可以在创建桶的时候选择也可以在桶列表中查看到。ENDPOINT 可以通过如下页面通过 REGION 查到 AWS 文档

其他云存储系统可以相应的文档找到与 S3 兼容的相关信息。

开始导入

导入方式和 Broker Load 基本相同,只需要将 WITH BROKER broker_name () 语句替换成如下部分

    WITH S3
    (
        "AWS_ENDPOINT" = "AWS_ENDPOINT",
        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
        "AWS_REGION" = "AWS_REGION"
    )

完整示例如下

    LOAD LABEL example_db.exmpale_label_1
    (
        DATA INFILE("s3://your_bucket_name/your_file.txt")
        INTO TABLE load_test
        COLUMNS TERMINATED BY ","
    )
    WITH S3
    (
        "AWS_ENDPOINT" = "AWS_ENDPOINT",
        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
        "AWS_REGION" = "AWS_REGION"
    )
    PROPERTIES
    (
        "timeout" = "3600"
    );

常见问题

  1. S3 SDK 默认使用 virtual-hosted style 方式。但某些对象存储系统可能没开启或没支持 virtual-hosted style 方式的访问,此时我们可以添加 use_path_style 参数来强制使用 path style 方式:
  WITH S3
  (
        "AWS_ENDPOINT" = "AWS_ENDPOINT",
        "AWS_ACCESS_KEY" = "AWS_ACCESS_KEY",
        "AWS_SECRET_KEY"="AWS_SECRET_KEY",
        "AWS_REGION" = "AWS_REGION",
        "use_path_style" = "true"
  )

SinceVersion 1.2

  1. 支持使用临时秘钥(TOKEN) 访问所有支持 S3 协议的对象存储,用法如下:
  WITH S3
  (
        "AWS_ENDPOINT" = "AWS_ENDPOINT",
        "AWS_ACCESS_KEY" = "AWS_TEMP_ACCESS_KEY",
        "AWS_SECRET_KEY" = "AWS_TEMP_SECRET_KEY",
        "AWS_TOKEN" = "AWS_TEMP_TOKEN",
        "AWS_REGION" = "AWS_REGION"
  )
<think>首先,用户的问题是关于在Doris数据库导入数据的。用户说:“我想将数据导入Doris数据库请问如何在Doris导入数据数据导入方法 Doris”。这看起来是用户的需求:如何导入数据Doris。 系统级指令:-所有行内数学表达式必须使用$...$格式。但在这个上下文中,可能不涉及数学表达式,所以我可以忽略,除非有相关部分。 -独立公式必须使用$$...$$并单独成段。同样,可能不适用。- LaTeX语法正确:确保在数学表达式中使用正确。 -使用中文回答:整个回答必须用中文。 -生成相关问题:在回答结束时生成相关问题。-回答中引用的段落末尾自然地添加引用标识,例如[^1]。参考提供的引用:[^1],[^2],[^3]。这些是关于Doris数据导入的引用。 用户可见层指令:-回答结构清晰,帮助用户逐步解决问题。 -尽量保证回答真实可靠。 提供的引用内容: -[^1]:关于Broker Load方式导入数据。 -[^2]:关于RoutineLoad方式,使用Kafka导入数据。 -[^3]:关于JSON格式导入数据。 用户的问题是基于这些引用,但引用是站内的,我需要参考它们来回答问题。用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我应该专注于用户的问题:如何在Doris导入数据。用户的具体问题:如何在Doris导入数据数据导入方法。从引用中,我知道Doris提供了多种导入方式: -BrokerLoad- RoutineLoad-还有其他方式如StreamLoad等。 引用[1]提到Doris有6种不同的导入方式:Broker Load是其中之一。引用[2]是关于Routine Load,使用Kafka。引用[3]是关于JSON导入支持。 系统指令说:“请尽可能多的参考用户上一次的问题和你的回答。”但这是用户的第一个消息,所以没有上一次问题。用户说:“我想将数据导入Doris数据库”,这是初始查询。 我的回答结构: -结构清晰,逐步解决问题。 -先介绍Doris数据导入的概述。-然后描述不同的导入方式。 -提供示例或步骤。 -结束时生成相关问题。 步骤: 1. **介绍Doris数据导入**:简要解释Doris支持多种导入方式,以适应不同数据源和需求。 2. **列出导入方式**:基于引用,Doris有6种方式,但引用中提到了BrokerLoad、RoutineLoad,以及JSON支持。-常见的导入方式包括:-Stream Load:用于实时导入小量数据。-Broker Load:用于批量导入大数据,支持多种数据源如HDFS。-Routine Load:用于持续从消息队列如Kafka导入数据。-其他方式如INSERTINTO等。 3. **详细描述每种方式**:-对于每种方式,简要说明其适用场景和使用方法。-使用引用中的信息:例如,引用[2]有RoutineLoad的SQL示例。4.**提供示例**:如引用[2]中的Routine Load创建语句。5.**添加引用标识**:在引用段落末尾添加[^1],[^2],[^3]。 6. **生成相关问题**:在结束时,类似示例,列出相关问题。生成的相关问题:-例如:1.如何选择适合的Doris数据导入方式?2.Doris导入数据时如何优化性能?3.Doris支持哪些数据格式导入?4.如何处理导入过程中的错误? 确保回答真实可靠:基于提供的引用和一般知识。引用是可靠的,因为是站内引用。 最终回答用中文。</think>### Doris数据库数据导入方法详解 在Doris导入数据是将外部数据源(如文件、消息队列或数据库)加载到Doris表的过程,以便用户通过SQL查询和分析数据Doris提供了多种导入方式,适应不同场景(如批量导入、实时流式导入或特定格式支持)。以下我将基于Doris官方文档和实践经验,逐步介绍主要导入方法、使用步骤和示例。Doris支持6种核心导入方式,包括异步和同步模式,您可以根据数据源类型、数据量和性能需求选择合适的方法[^1]。 #### 1. **常见导入方式概述** - **Broker Load**:适用于批量导入大数据(如TB级),支持从HDFS、S3等分布式存储导入CSV、Parquet等格式。它是异步操作,适合离线数据迁移。 - **Routine Load**:用于持续流式导入,从消息队列(如Kafka)实时加载数据。支持CSV或JSON格式,通过后台任务自动消费消息。 - **Stream Load**:实时同步导入小批量数据(如MB级),通过HTTP协议直接上传文件或数据流。常用于API调用或实时ETL。 - **INSERT INTO**:通过SQL语句直接插入数据,适合小规模数据或测试场景。 - **其他方式**:如S3 TVF(从AWS S3导入)或HDFS TVF(从HDFS导入),支持JSON等特定格式[^3]。 选择建议: - 大数据量批量导入:优先使用Broker Load。 - 实时流数据:选择Routine Load(如Kafka源)。 - 小数据或测试:Stream Load或INSERT INTO更简便。 #### 2. **详细导入步骤与示例** 以下是常用方法的操作步骤,基于Doris语法和最佳实践。确保您已创建目标表(如`demo_db.demo_table`)。 **方法一:Broker Load(批量导入)** - **适用场景**:从HDFS、S3导入CSV/Parquet文件。 - **步骤**: 1. 准备数据文件(如`data.csv`),上传到HDFS或S3。 2. 执行SQL命令创建导入作业。示例: ```sql LOAD LABEL demo_db.label_example -- 定义作业标签 ( DATA INFILE("hdfs://path/to/data.csv") -- 数据源路径 INTO TABLE demo_table COLUMNS TERMINATED BY "," -- 列分隔符 FORMAT AS "CSV" ) WITH BROKER "broker_name" -- 指定Broker名称 PROPERTIES ( "timeout" = "3600" -- 超时时间(秒) ); ``` 3. 检查状态:`SHOW LOAD WHERE LABEL = &#39;label_example&#39;;`,状态为`FINISHED`表示成功。 - 优点:高效处理海量数据,支持错误容忍[^1]。 **方法二:Routine Load(Kafka流式导入)** - **适用场景**:持续从Kafka导入实时数据(如日志或事件流)。 - **步骤**: 1. 创建Routine Load作业,指定Kafka配置。示例(参考引用[2]): ```sql CREATE ROUTINE LOAD demo_db.kafka_demo_csv ON demo_table COLUMNS TERMINATED BY ",", -- 列分隔符 COLUMNS(id, name, age) -- 目标表列映射 PROPERTIES ( "desired_concurrent_number" = "10", -- 并发任务数 "strict_mode" = "true" -- 严格模式校验 ) FROM KAFKA ( "kafka_broker_list" = "Kafka实例IP:9092", -- Kafka地址 "kafka_topic" = "demo-topic", -- Topic名称 "property.group.id" = "demo-group", -- 消费者组 "property.kafka_default_offsets" = "OFFSET_BEGINNING" -- 从起始偏移量消费 ); ``` 2. 向Kafka发送数据(如使用Java生产者): ```java kafkaProducer.send("demo-topic", "1,张三,30"); // 发送CSV格式消息 ``` 3. 监控作业:`SHOW ROUTINE LOAD FOR kafka_demo_csv;`,查看任务状态和错误日志[^2]。 - 优点:自动容错,支持Exactly-Once语义。 **方法三:Stream Load(HTTP实时导入)** - **适用场景**:快速导入小文件或API数据。 - **步骤**: 1. 使用curl或编程语言发送HTTP请求。示例(导入CSV文件): ```bash curl --location-trusted -u user:password \ -H "label:stream_load_example" \ -H "column_separator:," \ -T /path/to/data.csv \ http://Doris_FE_IP:8030/api/demo_db/demo_table/_stream_load ``` 2. 响应中检查`Status: Success`表示导入完成。 - 优点:简单快捷,适合实时场景。 **方法四:JSON格式导入** - **适用场景**:导入JSON数据(如API响应或日志)。 - **支持方式**:Stream Load、Broker Load、Routine Load均兼容JSON[^3]。 - **示例(Stream Load导入JSON)**: ```bash curl --location-trusted -u user:password \ -H "format: json" \ -H "strip_outer_array: true" \ # 处理JSON数组 -T data.json \ http://Doris_FE_IP:8030/api/demo_db/demo_table/_stream_load ``` - 确保JSON格式匹配表结构。 #### 3. **通用注意事项** - **性能优化**:调整`desired_concurrent_number`(并发数)或`max_batch_interval`(批处理间隔)提升吞吐量[^2]。 - **错误处理**:使用`SHOW LOAD WARNINGS;`查看导入错误,并在PROPERTIES中设置`max_filter_ratio`容忍部分错误。 - **数据格式**:支持CSV、JSON、Parquet等;确保分隔符和编码一致。 - **监控**:通过Doris Web UI或SQL命令(如`SHOW LOAD;`)跟踪作业状态。 - **最佳实践**:测试环境验证后上线;大数据导入分批进行以避免资源竞争。 如果遇到问题,参考[Doris官方文档](https://doris.apache.org/zh-CN/docs/data-operate/import)或社区资源。导入成功后,即可用MySQL客户端查询数据验证[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sunjian286

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

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

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

打赏作者

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

抵扣说明:

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

余额充值