Doris Stream Load 速查:RESTful 接口四步导入数据
【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris
Apache Doris 暴露了一组 HTTP 数据 API,其中 Stream Load 用得最多:一个 PUT 请求,就能把 CSV 或 JSON 数据送进目标表。搞懂 Doris RESTful 接口和各语言样例,你用脚本就能完成批量导入,不必安装额外客户端。
什么场景该用数据 API:接口与 SDK 怎么分工
RESTful 接口是最底层的积木:一条 HTTP 请求,不挑语言,适合临时导数、CI 脚本、Shell 里补数据。
各语言样例(Python、Go、Java、Rust)是对同一端点的现成封装,帮你处理连接、认证这些细节,适合放进长期运行的服务。
| 选择 | 适合情况 |
|---|---|
| 直接调 RESTful 接口 | 快速验证、跨语言、一次性任务 |
| 拿语言样例改造 | 常驻服务、需要连接复用与重试 |
经验法则:数据量小、频率低就裸调接口;要进生产链路,就拿样例代码做底座。
接口长什么样:端点、方法与认证
请求发到 FE 的 HTTP 端口(默认 8030),路径形如:
http://<FE 地址>:8030/api/<库名>/<表名>/_stream_load
注意方法不是 GET,而是 PUT,数据放在请求体里;身份用 HTTP Basic 认证,即用户名加密码。常用请求头参数如下:
| 参数 | 作用 | 示例 |
|---|---|---|
| Content-Type | 声明请求体内容类型 | text/plain; charset=UTF-8 |
| format | 数据解析格式 | csv |
| column_separator | 字段分隔符 | , |
| label | 本次导入的唯一标识,重名按幂等逻辑处理 | 2486da70-94bb |
| columns | 显式指定列导入顺序 | id,name |
上图是 Kettle 里的 Doris Stream loader 组件:填入 FE 地址 127.0.0.1:8030、库表和 format 等参数后提交,走的正是同一个接口。
四步跑通第一个导入:从配置到读响应
以 Python 样例 为底,流程分四步:
- 配置:建好目标表
db0.t_user(两列:id、name),记下 FE 地址、端口和账号。 - 请求头:声明
format为 csv、column_separator为逗号。 - 提交:用 PUT 把数据体
1,Tom\n2,Jelly发出去。 - 读响应:解析返回的 JSON,确认导入状态。
最小代码长这样:
import requests from requests.auth import HTTPBasicAuth url = 'http://127.0.0.1:8030/api/db0/t_user/_stream_load' headers = {'Content-Type': 'text/plain; charset=UTF-8', 'format': 'csv', 'column_separator': ','} resp = requests.put(url, headers=headers, data='1,Tom\n2,Jelly', auth=HTTPBasicAuth('root', '')) print(resp.status_code, resp.text)返回 JSON 里,这几个字段最值得关注:
| 字段 | 含义 |
|---|---|
| TxnId | 本次导入的事务编号,Doris 为每笔导入分配,可拿它查进度 |
| Status | 整体状态,Success 表示提交成功 |
| NumberLoadedRows | 真正写进表的行数 |
| LoadTimeMs | 导入耗时,单位毫秒 |
Go / Java / Rust 样例怎么选
三个官方样例都在 samples/stream_load 目录下,按技术栈取用即可:
- Go:只依赖标准库 net/http,零额外包袱,适合写轻量命令行导入工具。查看样例
- Java:面向对象的组织方式,方便嵌进企业应用。路径 samples/stream_load/java/DorisStreamLoad.java
- Rust:内存安全有编译期保证,适合高吞吐数据处理。查看样例
出问题怎么办:三种高频故障速查
| 故障 | 现象 | 常见原因 | 排查动作 |
|---|---|---|---|
| 认证失败 | 返回 401/403 | 账号或口令填错 | 核对 FE 中实际配置的用户名与密码 |
| 连接超时 | 请求挂起、迟迟无响应 | 8030 端口未放行 | 本地 telnet 一下 FE 的 8030 端口,确认能建立连接 |
| 格式不匹配 | 导入报错、行数对不上 | 字段数与表结构不一致,分隔符写错 | 用 columns 参数显式声明列顺序,再核对 column_separator |
更进一步:用 label 做断点续传
- label 幂等:label 是导入任务的唯一标识。同一个 label 重复提交时,Doris 按幂等逻辑处理,不会写两遍数据。把已成功的 label 记下来,失败后原样重发,就实现了断点续传。
- 按 TxnId 跟踪进度:响应里的 TxnId 对应一笔事务,拿它查询导入状态,适合做任务进度展示。
- 客户端预处理:脏数据在客户端先过滤、转换再提交,表里只进干净数据,也能减少被过滤的行数。
每次导入都配一个唯一 label,并养成读取 Status 字段的习惯。生产链路里,用 TxnId 串起提交与状态查询,导入过程就透明了。语言样例按现有技术栈选一个来改,比从零手写 HTTP 请求省事得多。
【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考