C# .Net Core通过StreamLoad向Doris写入CSV数据
以下代码可以只关注StreamLoad具体实现。
1.创建StreamLoad返回值Model
public class StreamLoadResponse
{public long TxnId { get; set; }public string Label { get; set; }public string Comment { get; set; }public string TwoPhaseCommit { get; set; }public string Status { get; set; }public string Message { get; set; }public long NumberTotalRows { get; set; }public long NumberLoadedRows { get; set; }public long NumberFilteredRows { get; set; }public long NumberUnselectedRows { get; set; }public long LoadBytes { get; set; }public long LoadTimeMs { get; set; }public long BeginTxnTimeMs { get; set; }public long StreamLoadPutTimeMs { get; set; }public long ReadDataTimeMs { get; set; }public long WriteDataTimeMs { get; set; }public long CommitAndPublishTimeMs { get; set; }
}
2.创建Doris StreamLoad接口
public interface IDorisApiService
{/// <summary>/// /// </summary>/// <param name="database">数据库</param>/// <param name="table">表</param>/// <param name="authorization">认证信息,格式 username:pwd</param>/// <param name="content">csv格式的字符串</param>/// <returns></returns>StreamLoadResponse StreamLoad(string database, string table, string authorization, string content);
}
3.实现接口,核心代码,逻辑并不复杂,组装一个http请求所需的内容。
需要注意的是:(1)示例csv格式的字符串分割符为‘\t’,而不是常用的逗号,这也是官方默认的分割方式,如果你想用其他的分隔符,需要在header里配置column_separator。建议不要用逗号,因为涉及到复杂的json字符串的时候,里面的逗号会导致解析异常,即便官方文档里有相关的处理方式(enclose),似乎仍然存在问题。(2)我们请求了两次,第一次请求会重定向到BE节点的地址,然后用此地址再次请求。这是正常的。(3)我们采用的format是csv_with_names,第一行是列明,请确保跟数据库table列顺序和数量保持一致
public class DorisApiService : IDorisApiService
{private readonly HttpClient _httpClient;public DorisApiService(HttpClient httpClient){_httpClient = httpClient;}public StreamLoadResponse StreamLoad(string database, string table, string authorization, string content){var url = $"/api/{database}/{table}/_stream_load";var request = new HttpRequestMessage(HttpMethod.Put, url);request.Headers.Add("Expect", "100-continue");request.Headers.Add("format", "csv_with_names");request.Headers.Add("column_separator", "\t");request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authorization);var response = _httpClient.Send(request, HttpCompletionOption.ResponseHeadersRead);if (response.StatusCode == HttpStatusCode.TemporaryRedirect || response.StatusCode == HttpStatusCode.RedirectKeepVerb){var redirectUrl = response.Headers.Location.ToString();request = new HttpRequestMessage(HttpMethod.Put, redirectUrl){Content = new StringContent(content, Encoding.UTF8, "text/plain")};request.Headers.Add("Expect", "100-continue");request.Headers.Add("format", "csv_with_names");request.Headers.Add("column_separator", "\t");request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authorization);response = _httpClient.Send(request, HttpCompletionOption.ResponseHeadersRead);}string responseBody = response.Content.ReadAsStringAsync().Result; if (response.IsSuccessStatusCode){var streamLoadResponse = JsonSerializer.Deserialize<StreamLoadResponse>(responseBody);if (streamLoadResponse.Status == "Success"){return streamLoadResponse;}else{throw new Exception(responseBody);}}else{throw new Exception(responseBody);}}
}
4.Program配置
services.AddHttpClient<IDorisApiService, DorisApiService>(client =>
{//从配置文件获取Doris的请求地址和端口:settings.ApiHostclient.BaseAddress = new Uri(settings.ApiHost);client.Timeout = TimeSpan.FromSeconds(300);
}).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{AllowAutoRedirect = false
});
相关文章:

C# .Net Core通过StreamLoad向Doris写入CSV数据
以下代码可以只关注StreamLoad具体实现。 1.创建StreamLoad返回值Model public class StreamLoadResponse {public long TxnId { get; set; }public string Label { get; set; }public string Comment { get; set; }public string TwoPhaseCommit { get; set; }public string…...

React-自定义Hook与逻辑共享
#题引:我认为跟着官方文档学习不会走歪路 在 React 中,自定义 Hook 是一种复用逻辑的方式。自定义 Hook 是一个 JavaScript 函数,名称以 use 开头,可以调用其他的 Hook, 可以返回任意值。 创建自定义Hook 假设你正在开发一款重…...

蓝桥杯每日真题 - 第17天
题目:(最大数字) 题目描述(13届 C&C B组D题) 题目分析: 操作规则: 1号操作:将数字加1(如果该数字为9,变为0)。 2号操作:将数字…...

游戏开发实现简易实用的ui框架
游戏开发实现简易实用的ui框架 本文使用cocos引擎实现,框架代码本质上不依赖某一个引擎,稍作修改也能作为其他引擎的实现 1.1 UI管理框架的核心需求剖析 分层与类型管理 对不同类型UI需要进行分层管理。不同层级的UI需要有不同的父节点,保证渲…...

vue3的attr透传属性详解和使用法方式。以及在css样式的伪元素中实现
在 Vue 3 和 TypeScript 中,属性透传(attr pass-through)是指将组件的属性传递到其根元素或某个子元素中。这个概念在开发可复用的组件时非常有用,尤其是当你希望将父组件的属性动态地传递给子组件的某个 DOM 元素时。 在 Vue 3 …...

【仿真建模-MESA】框架简介
1. 简介 Mesa是一个基于Python3的开源项目,旨在提供一个现代、易用的多智能体仿真环境。它借鉴了NetLogo、Repast和MASON等多智能体仿真框架的优点,并结合Python语言的强大功能,为用户提供了丰富的建模和仿真工具。 《官方文档》 2. 核心组件…...

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
目录 Linux软件包管理器 - yum Linux下安装软件包的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 批量化注释 vim的简单配置 Linux编译器 - gcc/g gcc/g的作用 gcc/g语…...

VSCode 间距太小
setting->font family 使用:Consolas, Courier New, monospace 字体...

【K8S系列】imagePullSecrets配置正确,但docker pull仍然失败,进一步排查详细步骤
如果 imagePullSecrets 配置正确,但在执行 docker pull 命令时仍然失败,可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录: 1.1 直接登录 在命令行中,执行以下命令: …...

【ARM Coresight OpenOCD 系列 5.1 -- OpenOCD 无法识别CPUID 问题: xxx is unrecognized】
请阅读【嵌入式开发学习必备专栏】 文章目录 OpenOCD 无法识别CPUID 问题ARM CPUIDCPUID 特性CPUID 寄存器字段OpenOCD 无法识别CPUID 问题 在使用OpenOCD 进行CPU debug的过程中有时会报出 无法识别CPUID的问题,本文将会介绍如何解决这个问题。首先我们来学习下什么是CPUID,…...

如何实现点击目录跳转到指定位置?【vue】
需求:实现目录点击跳转到指定位置,点击后直接定位到指定模块 效果: 实现方法: (1)a标签跳转 普通使用: <!DOCTYPE html> <html><head><title>a-Demo</title>&l…...

SQL 通配符
SQL 通配符 在SQL中,通配符是一种特殊字符,用于在LIKE子句中搜索数据。它们主要用于模式匹配,允许你搜索符合特定模式的值。SQL中的通配符通常用于SELECT、UPDATE和DELETE语句中,以增加查询的灵活性。本文将详细介绍SQL中常用的通…...

ubuntu显示管理器_显示导航栏
ubuntu文件管理器_显示导航栏 一、原始状态: 二、显示导航栏状态: 三、原始状态--->导航栏状态: 1、打开dconf编辑器,直接在搜索栏搜索 dconf-editor ------如果没有安装,直接按流程安装即可。 2、进入目录:org …...

黑芝麻嵌入式面试题及参考答案
请详细描述二叉树的深度优先搜索(dfs)流程。 深度优先搜索是一种用于遍历二叉树的重要算法,主要有先序遍历、中序遍历和后序遍历三种方式。 先序遍历的流程是,首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。这就好比是在探索一个家族树,先拜访家族中的长辈…...

使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
当涉及到图数据时,复杂性是不可避免的。无论是社交网络中的庞大互联关系、像 Freebase 这样的知识图谱,还是推荐引擎中海量的数据量,处理如此规模的图数据都充满挑战。 尤其是当目标是生成能够准确捕捉这些关系本质的嵌入表示时,…...

系统性能优化方法论详解:从理解系统到验证迭代
在当今的企业级和云计算环境中,系统性能优化已成为提升竞争力的关键因素。本文将对系统优化的步骤进行深入解析,帮助读者系统化地进行性能优化,从而显著提升系统的整体表现。 流程概述: 系统性能优化的流程可以分为以下几个关键步骤&#x…...

使用Tengine 对负载均衡进行状态检查(day028)
本篇文章对于在服务器已经安装了nginx,但却希望使用Tengine 的状态检查或其他功能时使用,不需要卸载服务器上的nginx,思路是使用干净服务器(未安装过nginx)通过编译安装Tengine,通过对./configure的配置,保证安装Tengi…...

网站推广实战案例:杭州翔胜科技有限公司如何为中小企业打开市场大门
以下是以杭州翔胜科技有限公司为例,解析其如何通过网站推广为中小企业打开市场大门的实战案例: 一、一站式网站推广方案 杭州翔胜科技有限公司提供一站式网站推广方案,该方案整合了多种推广手段,如搜索引擎优化(SEO&a…...

视频修复技术和实时在线处理
什么是视频修复? 视频修复技术的目标是填补视频中的缺失部分,使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频,导致处理速度慢,难以满足实时处理的需求。 技术发…...

文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
一、在图 25-2 所示的带权重的有向图上运行 Floyd-Warshall 算法,给出外层循环的每一次迭代所生成的矩阵 D ( k ) D^{(k)} D(k) 。如果要写代码,请用go语言。 文心一言: 好的,让我们一步步分析在带权重的有向图上运行 Floyd-Wa…...

如何使用本地大模型做数据分析
工具:interpreter --local 样本数据: 1、启动分析工具 2、显示数据文件内容 输入: 显示/Users/wxl/work/example_label.csv 输出:(每次输出的结果可能会不一样) 3、相关性分析 输入: 分析客户类型与成…...

【Nginx从入门到精通】04-安装部署-使用XShell给虚拟机配置静态ip
文章目录 总结1、XShell :方便管理多台机器2、配置ip文件:区分大小写 一、查看上网模式二、Centos 7 设置静态ipStage 1 :登录root账号Stage 2 :设置静态ip : 修改配置文件 <font colororange>ifcfg-ens33Stage 2-1…...

C# 面向对象的接口
接口,多态性,密封类 C# 接口 遥控器是观众和电视之间的接口。 它是此电子设备的接口。 外交礼仪指导外交领域的所有活动。 道路规则是驾车者,骑自行车者和行人必须遵守的规则。 编程中的接口类似于前面的示例。 接口是: APIsC…...

使用IDEA+Maven实现MapReduced的WordCount
使用IDEAMaven实现MapReduce 准备工作 在桌面创建文件wordfile1.txt I love Spark I love Hadoop在桌面创建文件wordfile2.txt Hadoop is good Spark is fast上传文件到Hadoop # 启动Hadoop cd /usr/local/hadoop ./sbin/start-dfs.sh # 删除HDFS的hadoop对应的input和out…...

go语言示例代码
go语言示例代码, package mainimport "fmt" import "encoding/json"func main() {list : []int{11, 12, 13, 14, 15}for i,x : range list {fmt.Println("i ", i, ",x ", x)}fmt.Println("")for i : range l…...

华为云容器监控平台
首先搜索CCE,点击云容器引擎CCE 有不同的测试,生产,正式环境 工作负载--直接查询服务名看监控 数据库都是走的一个 Redis的查看...

阿里短信发送报错 InvalidTimeStamp.Expired
背景 给客户做的人力资源系统,今天客户用阿里云短信,结果报错: nvalidTimeStamp.Expired Specified time stamp or date value is expired. HTTP Status: 400 RequestID: A 怎么办呢?搜资料, 是客户端时间ÿ…...

Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好
目的 为了将ubuntu服务器IP固定, 方便ssh连接人在服务器前使用图形化界面设置 设置 找到自己的网卡名称, 我的是 eno1, 并进入设置界面 查看当前的IP, 网关, 掩码和DNS (注意对应eno1) nmcli dev show掩码可以通过以下命令查看完整的 (注意对应eno1) , 我这里是255.255.255.…...

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号
Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号 Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分…...

Cesium 加载B3DM模型
一、引入Cesium,可以使用该链接下载cesium 链接: https://pan.baidu.com/s/1BRQyaFCkxO2xQQT5RzFUCw?pwdkcv9 提取码: kcv9 在index.html文件中引入cesium <script type"text/javascript" src"/Cesium/Cesium.js"></script> …...