ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

跑通 Doris Stream Load:从认证失败到稳定批量导入

跑通 Doris Stream Load:从认证失败到稳定批量导入 跑通 Doris Stream Load从认证失败到稳定批量导入【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris凌晨灌 CSV 卡在 401先认清楚卡点用 Doris Stream Load 跑凌晨的 CSV 定时导入请求打到 FE前端管控节点却连续返回 401 Unauthorized。日志里没有落库记录重跑又提示 label already exists。这类 Doris 数据导入的问题很少出在表结构上真正卡住你的是这套 RESTful 接口链路上的认证、跳转、状态回传三环没走通。一条请求从 FE 到落库要经过哪几步把一次请求的生命周期拆成四步先建立心智模型再碰代码客户端向 FE 的/api/{db}/{table}/_stream_load端点发 PUTFE 校验认证与表是否存在FE 通过认证后生成事务编号 Txn 和唯一任务标识 label再以 307 重定向把请求转给某个 BE后端存储计算节点BE 按 format 请求头逐行解析数据、写入 tablet解析失败的行计入过滤数BE 将最终状态打包成 JSON 返回之后你可以拿 label 或 TxnId 在 FE 侧回查这次任务。用 Python 的 requests.put 发第一条 Stream Load 请求直接抄 DorisStreamLoad.py 的核心逻辑砍到能跑的最小集import requests from requests.auth import HTTPBasicAuth url http://127.0.0.1:8030/api/db0/t_user/_stream_load headers {format: csv, column_separator: ,, Expect: 100-continue} resp requests.put(url, data1,Tom\n2,Jelly, headersheaders, authHTTPBasicAuth(root, )) print(resp.status_code, resp.json()[Status])这段代码能证明不依赖任何 SDK单个 PUT 请求就能跑完认证、跳转、落库的全链路。选 PUT 而非 POST是因为端点按提交写入语义定义且 307 跳转后方法必须保持不变客户端若降级成 GET 会直接报错。判断成败看响应 JSONStatus 为 Success 且 NumberLoadedRows 大于 0 才算导入成功HTTP 200 只代表请求被受理NumberFilteredRows 非 0 说明有坏行被过滤需要回查数据。请求头与响应字段一张表怎么查把请求头参数和响应字段放进一张表对照配置和排错都能对上号字段作用踩坑提示format声明数据格式csv 或 jsonjson 数据是数组时记得配 strip_outer_arraycolumn_separatorCSV 的字段分隔符与文件实际分隔符不一致时整行错位columns显式声明导入列顺序支持计算列文件列序与表结构不一致时靠它对齐label导入任务唯一标识重复 label 直接报错两套数据别复用Expect: 100-continue大数据体的续传协商各语言示例都显式带上删掉大文件易卡住Status最终成败标记只有 Success 算成功HTTP 200 不算NumberLoadedRows / NumberFilteredRows成功行 / 被过滤行过滤行非 0 时按 bad_records_url 下载坏数据TxnId事务编号与 label 配对用于回查任务状态三种语言的 Stream Load 示例怎么选按技术栈对号入座仓库里对应语言的示例各解决一类问题语言适用场景一句话差异Python脚本、定时任务、ETL 胶水代码需手动保留 307 跳转后的认证头Go常驻服务、高并发批量写入默认 Client 跟随跳转丢认证用自定义 Transport 兜底Java企业应用、JVM 技术栈原生 HttpURLConnection 实现可直接嵌入现有服务如果跑脚本和定时任务就选 Python如果服务本身是 Go 就选 Go如果已在 JVM 栈里就选 Java。示例分别在 python、go、java 目录下。最常被问到但文档没写清楚的是重定向后的认证FE 只负责 307 转发真正收数据的是 BE而多数 HTTP 客户端跨主机跳转会丢弃 Basic Auth 头所以 Go 示例在 Transport 里对每次请求重设认证Python 示例写了 should_strip_auth 回调。认证失败、端口不通、字段错位按什么顺序查按离客户端从近到远的顺序排查别跳步先查认证用curl -u root:密码 -X PUT http://127.0.0.1:8030/api/db0/t_user/_stream_load -H format: csv -H Expect: 100-continue -d 1,Tom复现返回 401 时核对账号密码确认该账号对目标表有导入权限FE 侧行为由 conf/fe.conf 控制再查端口telnet fe_host 8030不通就找网络策略FE 的 HTTP 端口是 fe.conf 里的http_port默认 8030BE 端口同理看 conf/be.conf最后查字段请求通了但 NumberFilteredRows 非 0用curl -o bad.csv bad_records_url下载坏行提示字段数不匹配时用 columns 请求头显式声明列序。从能跑到稳加三层封装断点续传成功 label 持久化重试复用同一 label 保幂等批量追踪记录 TxnId 与 label 配对用 GET 接口轮询终态客户端变换PUT 前本地清洗用 columns 头声明计算列打开 samples/stream_load 目录把示例里的认证和 label 换成你的环境先跑通一次最小导入。【免费下载链接】dorisApache Doris is a real-time analytics and hybrid search database for AI agents.项目地址: https://gitcode.com/GitHub_Trending/doris/doris创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表