news 2026/9/11 17:37:21

Apache Doris 数据接入层:一次讲透 Doris Stream Load HTTP API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache Doris 数据接入层:一次讲透 Doris Stream Load HTTP API

Apache Doris 数据接入层:一次讲透 Doris Stream Load HTTP API

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

Apache Doris 项目的数据接入层里,Doris RESTful API 是一条用一个 HTTP 请求就能把数据落表的轻量通道,其中 Stream Load 是调用频率最高的接口。本文结合官方多语言 Doris SDK 示例,把一次请求从 URL 拼装到响应解析的全链路拆开讲完,并覆盖生产环境的常见坑位与组合玩法。

直连 FE 端口:300 万行埋点任务的真实诉求

每天凌晨两点,ETL 任务要把 300 万行点击埋点写进 Doris 明细表。数据已经躺在采集服务的内存里,如果绕道 HDFS 再走 Broker Load,等于多维护一套中间文件和任务生命周期。此时最短的路径是直接向 FE 发一个 HTTP 请求:无中间件、无额外组件,一次 PUT 结束战斗。

拆解一次 Doris Stream Load 请求的五个环节

URL 固定为http://<fe_host>:8030/api/<database>/<table>/_stream_load,FE 的 HTTP 端口默认 8030,路径里依次是库名、表名和写死的_stream_load后缀,客户端只需替换前两个占位符。

方法必须用 PUT,数据体直接跟在请求体里传输;带上Expect: 100-continue后,FE 会先确认接收意向,客户端再推大 body,避免无效传输。

请求头承载全部导入语义,常用五项如下:

请求头取值与作用
Content-Typetext/plain; charset=UTF-8,声明 body 编码
formatcsvjson,决定 body 的解析方式
column_separatorCSV 字段分隔符,缺省为逗号
label本次导入的唯一标识,自定义后重试安全
Expect100-continue,延迟 body 直至 FE 确认

认证走 HTTP Basic,账号即 Doris 数据库账号;若 fe.conf 中enable_http_auth开启而未携带凭证,请求会被直接拒绝。

响应分两段:FE 先回 307 把请求重定向到真正处理数据的 BE,客户端跟随跳转后才拿到 JSON 正文。正文里重点看StatusLabelNumberLoadedRowsNumberFilteredRows四个字段。

跑通第一条 Stream Load:最小 Python 示例

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': ',', 'Expect': '100-continue', } session = requests.Session() session.should_strip_auth = lambda old, new: False # 307 跳转 BE 后保留认证 data = '1,Tom\n2,Jelly' resp = session.put(url, headers=headers, data=data, auth=HTTPBasicAuth('root', '')) print(resp.status_code, resp.text)

运行后终端先打印 200,随后是一行 JSON:先确认StatusSuccess,再核对NumberLoadedRowsNumberTotalRows是否相等,被过滤的行会体现在NumberFilteredRows里。Label则用于标记这次导入的身份,排查重复时靠它。完整脚本见 samples/stream_load/python/DorisStreamLoad.py。

速览四个官方 Doris SDK 示例

  • Python —— 基于 requests 封装 session 并处理 307 跳转后的认证保留,适合脚本快速验证 —— samples/stream_load/python/DorisStreamLoad.py
  • Go —— 用 net/http 携带 context 与 Basic 凭证发起请求,面向常驻数据服务 —— samples/stream_load/go/doris_stream_load.go
  • Java —— 请求构造与响应解析封装成方法,贴合企业级批处理任务 —— samples/stream_load/java/DorisStreamLoad.java
  • Rust —— 内存安全,适合嵌入高吞吐的处理管道 —— samples/stream_load/rust/src/doris_stream_load.rs

除代码外,Kettle 插件把同一个请求封装成了可视化步骤,在配置窗里填好 FE 地址、库表名和 Stream Load 属性即可发起导入:

排查 Doris 接口认证失败、超时与脏数据的四项清单

  • 401 认证失败:现象是 Basic 凭证被拒,定位时核对 fe.conf 的enable_http_auth开关与账号状态,动作是修正密码或临时关开关复现。
  • 连接超时:现象是客户端卡在建立连接阶段,用telnet <fe_host> 8030定位端口是否放行,动作是打开安全组或检查 FE 进程存活。
  • 过滤行数大于 0:现象是NumberFilteredRows非零,定位是 body 字段数或类型与表结构错位,动作是用columns参数显式指定导入列顺序。
  • 响应 200 但表里查不到数据:现象是静默失败,定位响应中的Label是否与历史任务重名,动作是更换 label 值后重试,因为 label 是任务唯一键。

组合三种模式,把接口从 Demo 推进到生产

  • label 幂等续传:把成功的 label 落盘记录,失败重跑前先查重,直接跳过已导入批次,杜绝重复数据。
  • TxnId 进度跟踪:每次请求返回一个TxnId,用它关联批次任务的提交与提交后状态,卡住的任务一眼可辨。
  • 客户端预处理:清洗、字段映射、分区计算都在发送前完成,Go 示例里的columns表达式甚至能在服务端直接构造 bitmap 列,把请求体留给纯数据。

回到开头凌晨那 300 万行埋点,整条链路其实就压缩成了一次 PUT:拼好请求头、附上数据体、盯住响应里的四个字段。建议先在开发环境把 Python 示例完整跑一遍,固化StatusNumberFilteredRows的判定口径,再把同一套参数平移进生产语言的 SDK,并把 label 命名规范(业务 ID + 批次号)写进代码评审清单。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 17:36:35

《保险人AI手册》:一本写给保险从业者的AI入门书

从去年的DeepSeek到今年的龙虾&#xff0c;几乎每隔一段时间&#xff0c;都有新的AI工具诞生。 然而在这个时代下&#xff0c;不少保险人却越来越慌。 “总听人说AI特别好用&#xff0c;自己下载了豆包&#xff0c;结果写出来千篇一律&#xff0c;都不敢发给客户。改来改去&am…

作者头像 李华
网站建设 2026/9/11 17:36:12

MuJoCo 柔性体仿真完整指南:3 个官方示例搞懂刚柔耦合建模

MuJoCo 柔性体仿真完整指南&#xff1a;3 个官方示例搞懂刚柔耦合建模 【免费下载链接】mujoco Multi-Joint dynamics with Contact. A general purpose physics simulator. 项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco MuJoCo&#xff08;Multi-Joint dy…

作者头像 李华
网站建设 2026/9/11 17:33:37

Duix.Avatar 去水印完整指南:5 步解锁无水印口播视频输出

Duix.Avatar 去水印完整指南&#xff1a;5 步解锁无水印口播视频输出 【免费下载链接】Duix-Avatar &#x1f680; Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_Tre…

作者头像 李华
网站建设 2026/9/11 17:32:13

Python自动化贴吧签到脚本开发指南

1. 项目背景与需求分析贴吧账号的日常维护中&#xff0c;签到是最基础也最容易遗忘的操作。手动签到不仅耗时耗力&#xff0c;还经常因为疏忽导致连续签到中断。这个Python脚本就是为了解决这个痛点而设计的——用自动化技术替代重复劳动。对于需要批量管理多个贴吧账号的用户&…

作者头像 李华
网站建设 2026/9/11 17:30:31

前端转全栈必看:从 SQL 基础到跨表 JOIN 实战,彻底搞懂数据库核心

一、 数据库的诞生与核心定位1. 数据库为什么诞生&#xff1f;纸质文件时代&#xff1a;信息容量极小&#xff0c;无法进行任何自动计算和关联 。Excel 表格时代&#xff1a;解决了大批量数据的存储&#xff0c;但无法处理多表关联 。例如&#xff0c;一个单据表记载订单&#…

作者头像 李华