☰
Doris 数据 API 完全指南:RESTful 接口与 SDK 快速上手
2026/9/28 0:45:28 网站建设 项目流程

Doris 数据 API 完全指南:RESTful 接口与 SDK 快速上手

【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris

你的业务系统每晚要把一千万行日志推进 Doris,直接拼 SQL 逐条 INSERT 显然扛不住。Apache Doris 的 数据 API 就是为这种批量写入准备的:FE 节点的 HTTP 端口(默认 8030)上挂着一组 RESTful 接口,把数据按 CSV / JSON 打包发过去即可,官方仓库的 samples/stream_load/ 目录还备好了 Python、Go、Java、Rust 四种语言的 SDK 参考实现。读完这篇 Doris 数据导入教程,你会知道接口长什么样、请求怎么拼、出错了往哪查。

API 家族地图

先花三十秒把接口分布看一遍,心里有底,后面拼请求才不会迷路。

接口请求方法典型用途支持格式
/api/{db}/{table}/_stream_loadPUT单次批量数据导入,最常用CSV、JSON(含 JSON Lines)
/api/{db}/{table}/_stream_load/{label}GET回查某次导入任务的状态与结果返回 JSON
/api/{db}/_txn_statusGET按 label 查事务是否已提交,做结果确认返回 JSON
MySQL 协议端口 9030TCP交互式查询、建表、小批量 INSERT任意 MySQL 客户端

日常导入几乎只用第一条;后两条是排障和核对结果的利器,后面会用到。

五分钟跑通 Stream Load

这段最小示例能直接执行,建议照着敲一遍再往下看参数细节。

import requests endpoint = 'http://127.0.0.1:8030/api/db0/t_user/_stream_load' payload = '1,Alice\n2,Bo' options = { 'Content-Type': 'text/plain; charset=UTF-8', 'format': 'csv', 'column_separator': ',', 'Expect': '100-continue', } result = requests.put(endpoint, data=payload, headers=options, auth=('root', '')) print(result.status_code) print(result.json())

这段代码做了什么:向 FE 的 8030 端口发一个 PUT 请求,把两行 CSV 文本当作导入体,format、column_separator等选项全部走 HTTP 头传递,最后打印响应。你会看到类似这样的 JSON:

{ "TxnId": 88102, "Label": "5c1e90aa-3d72-4f6b-9e04-2b8a71c4d93e", "Status": "Success", "Message": "OK", "NumberTotalRows": 2, "NumberLoadedRows": 2, "NumberFilteredRows": 0, "LoadBytes": 15, "LoadTimeMs": 43 }

解读两个关键点:

  • 为什么用 PUT:Stream Load 是一次"原子写"——要么整批数据全部可见,要么完全不可见。PUT 的语义就是"用这个请求体覆盖/落定某个资源状态",和导入的事务性正好吻合。另外客户端带上Expect: 100-continue头,FE 会在真正接收数据前先用 100 响应确认参数合法,避免白传一个大 body。
  • 认证怎么带:就是标准 HTTP Basic Auth,用户名密码和 MySQL 侧一致。requests 里传auth=(user, pwd)即可,其他语言的写法见仓库示例。

注意Status才是最终结论,HTTP 200 只代表请求被受理;NumberFilteredRows大于 0 说明有行被过滤,要留意。

一份请求里的关键参数

参数全部通过请求头传递,下面这张表把"取什么值、为什么"一次讲清。

参数说明与取值建议
Content-Type数据体编码,一般固定text/plain; charset=UTF-8
format数据格式,csv或json;JSON 模式可配合jsonpaths提取字段
column_separatorCSV 字段分隔符,默认逗号;数据里有引号转义时换成\t这类不可见字符更稳
columns指定导入列及顺序,如id,name;只导部分列或列序与表不一致时必写
label任务唯一标识,建议 UUID 或"业务前缀_批次号";不填则自动生成
Expect填100-continue,让 FE 先校验参数再收数据

label值得多说两句:它既是任务的身份证,也是幂等键。同一 label 重复提交,Doris 会拒绝并告诉你之前那次任务的状态,这正是后面"断点续传"技巧的基础。

多语言 SDK 怎么选

四种实现都在 samples/stream_load/ 下,各是一百行左右的可运行样例,没有额外依赖地狱。

语言仓库内路径实现特点适用场景
PythonDorisStreamLoad.py基于 requests,几十行写完,调试最方便脚本、任务流、快速验证
Godoris_stream_load.go标准库 net/http,请求头里演示了columns表达式与jsonpaths高并发微服务、旁路采集器
JavaDorisStreamLoad.javaApache HttpClient,类结构清晰,附 label 冲突时的响应说明企业内 Java 服务集成
Rustdoris_stream_load.rsreqwest + tokio 异步模型,认证头手动 Base64 拼法很直白性能敏感、内存安全的网关/代理

一句话选型:图省事选 Python,跑在生产链路里选 Go 或 Java,做高性能边车选 Rust。

三个高频故障排查手册

导入报错时,九成问题落在这三格子里,按"现象 → 原因 → 处理"走一遍基本能自愈。

1. 认证失败:响应 401 或提示 authentication 错误

  • 现象:HTTP 状态 401,或响应 JSON 里Message提到认证不通过。
  • 原因:用户名密码写错、客户端跨域重定向时 Basic 头被剥离、集群 conf/fe.conf 里enable_http_auth的设置与你的预期不符。
  • 处理:先用 MySQL 客户端验证同一组账号能否登录;确认认证头在整条请求链路上都保留;核对 fe.conf 中的开关配置。

2. 端口不通:请求挂起或连接被拒

  • 现象:Connection refused或读超时,请求长时间没返回。
  • 原因:FE 的 8030 端口没放行;或者 FE 把请求 307 重定向到了负责该表的 BE,客户端到 BE 的 HTTP 端口(默认 8040)不通,重定向后卡死。
  • 处理:telnet <fe_host> 8030先验证入口;再确认客户端到各 BE 的 8040 端口可达;检查防火墙与安全组是否同时放行了这两段。

3. 字段数不匹配:行被批量过滤

  • 现象:Status为Partial Success或Fail,NumberFilteredRows明显偏大。
  • 原因:CSV 实际列数与表结构不一致,或分隔符选错导致字段被切开、合并。
  • 处理:用columns头显式声明导入列及顺序(如columns: id,name);样本数据先跑几百行验证,确认NumberFilteredRows为 0 再放量。

把接口玩出花样(进阶)

🚀 基础流程跑通后,下面三招能让导入链路更工程化:

  1. label 幂等,天然断点续传:给每批数据生成固定 label(如订单表_20260909_第03批),落库到本地记录。失败重试时沿用同一 label——已成功则返回Label Already Exists,直接跳过;未成功则重新提交。无需额外实现去重逻辑。
  2. TxnId 追踪进度:响应里的TxnId是这次导入在集群中的事务号,把它记入日志后,可结合/api/{db}/_txn_status?label=xxx查询事务最终状态,做端到端的提交确认,避免"客户端以为成功、实际没落地"的模糊地带。
  3. 客户端预处理:脏数据别扔给服务端。类型转换、空值归一(空串转 NULL)、超长字段截断都在发送前做完,既省服务端过滤开销,也让NumberFilteredRows真正反映意外问题。

写在最后

一个可以直接落地的建议:按你项目的主流语言,把 samples/stream_load/ 里的对应示例改造成内部工具,给 label 固定加业务前缀,并在每批导入后检查NumberFilteredRows——这三件事做到位,Stream Load 就能稳定地扛住日常批量写入。更多细节直接翻仓库里的示例源码,比任何文档都诚实。

【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询