doris: CSV导入数据
本文介绍如何在 Doris 中导入 CSV 格式的数据文件。Doris 支持灵活的 CSV 格式配置,包括自定义分隔符、字段包围符等,并提供多种导入方式以满足不同场景的数据导入需求。
导入方式
Doris 支持以下方式导入 CSV 格式数据:
- Stream Load
- Broker Load
- Routine Load
- MySQL Load
- INSERT INTO FROM S3 TVF
- INSERT INTO FROM HDFS TVF
参数配置
参数支持情况
下表列出了各种导入方式支持的 CSV 格式参数:
参数 | 默认值 | Stream Load | Broker Load | Routine Load | MySQL Load | TVF |
---|---|---|---|---|---|---|
行分隔符 | \n | line_delimiter | LINES TERMINATED BY | 不支持 | LINES TERMINATED BY | line_delimiter |
列分隔符 | \t | column_separator | COLUMNS TERMINATED BY | COLUMNS TERMINATED BY | COLUMNS TERMINATED BY | column_separator |
包围符 | 无 | enclose | PROPERTIES.enclose | PROPERTIES.enclose | PROPERTIES.enclose | enclose |
转义符 | \ | escape | PROPERTIES.escape | PROPERTIES.escape | PROPERTIES.escape | escape |
跳过行数 | 0 | skip_lines | PROPERTIES.skip_lines | 不支持 | IGNORE LINES | skip_lines |
裁剪双引号 | false | trim_double_quotes | 不支持 | PROPERTIES.trim_double_quotes | 不支持 | trim_double_quotes |
压缩格式 | plain | compress_type | PROPERTIES.compress_type | 不支持 | 不支持 | compress_type |
注意
- Stream Load:参数直接通过 HTTP Header 指定,如:
-H "line_delimiter:\n"
- Broker Load:参数通过 SQL 语句指定,其中:
- 分隔符通过
COLUMNS TERMINATED BY
,LINES TERMINATED BY
指定 - 其他参数通过
PROPERTIES
指定,如:PROPERTIES("compress_type"="gz")
- 分隔符通过
- Routine Load:参数通过 SQL 语句指定,其中:
- 分隔符通过
COLUMNS TERMINATED BY
指定 - 其他参数通过
PROPERTIES
指定,如:PROPERTIES("enclose"="\"")
- 分隔符通过
- MySQL Load:参数通过 SQL 语句指定,其中:
- 分隔符通过
LINES TERMINATED BY
,COLUMNS TERMINATED BY
指定 - 其他参数通过
PROPERTIES
指定,如:PROPERTIES("escape"="\\")
- 分隔符通过
- TVF:参数通过 TVF 语句指定,如:
S3("line_delimiter"="\n")
参数说明
行分隔符
- 作用:指定导入文件中的换行符
- 默认值:
\n
- 特点:支持多个字符组合作为换行符
- 使用场景和示例:
- Linux/Unix 系统文件:
数据文件: 张三,25\n 李四,30\n参数设置: line_delimiter:\n (默认值,可不设置)
- Windows 系统文件:
数据文件: 张三,25\r\n 李四,30\r\n参数设置: line_delimiter:\r\n
- 特殊程序生成文件:
数据文件: 张三,25\r 李四,30\r参数设置: line_delimiter:\r
- 自定义多字符分隔符:
数据文件: 张三,25|| 李四,30||参数设置: line_delimiter:||
- Linux/Unix 系统文件:
列分隔符
- 作用:指定导入文件中的列分隔符
- 默认值:
\t
(制表符) - 特点:
- 支持可见和不可见字符
- 支持多字符组合
- 不可见字符需要使用
\x
前缀的十六进制表示
- MySQL 协议特殊处理:
- 不可见字符需要额外增加反斜线
- 如 Hive 的
\x01
在 Broker Load 中需要写成\\x01
- 使用场景和示例:
- 常见可见字符:
数据文件: 张三,25,北京 李四,30,上海参数设置: column_separator:,
- 制表符(默认):
数据文件: 张三 25 北京 李四 30 上海参数设置: column_separator:\t (默认值,可不设置)
- Hive 文件(Stream Load):
数据文件: 张三\x0125\x01北京 李四\x0130\x01上海参数设置: column_separator:\x01
- Hive 文件(Broker Load):
数据文件: 张三\x0125\x01北京 李四\x0130\x01上海参数设置: PROPERTIES("column_separator"="\\x01")
- 多字符分隔符:
数据文件: 张三||25||北京 李四||30||上海参数设置: column_separator:||
- 常见可见字符:
包围符
- 作用:保护包含特殊字符的字段,防止被错误解析
- 限制:仅支持单字节字符
- 常用字符:
- 单引号:
'
- 双引号:
"
- 单引号:
- 使用场景和示例:
- 字段包含列分隔符:
数据:a,'b,c',d 列分隔符:, 包围符:' 解析结果:3个字段 [a] [b,c] [d]
- 字段包含行分隔符:
数据:a,'b\nc',d 列分隔符:, 包围符:' 解析结果:3个字段 [a] [b\nc] [d]
- 字段既包含列分隔符又包含行分隔符:
数据:a,'b,c\nd,e',f 列分隔符:, 包围符:' 解析结果:3个字段 [a] [b,c\nd,e] [f]
- 字段包含列分隔符:
转义符
- 作用:转义字段中与包围符相同的字符
- 限制:仅支持单字节字符,默认为
\
- 使用场景和示例:
- 字段包含包围符:
数据:a,'b,\'c',d 列分隔符:, 包围符:' 转义符:\ 解析结果:3个字段 [a] [b,'c] [d]
- 字段包含多个包围符:
数据:a,"b,\"c\"d",e 列分隔符:, 包围符:" 转义符:\ 解析结果:3个字段 [a] [b,"c"d] [e]
- 字段包含转义符本身:
数据:a,'b\\c',d 列分隔符:, 包围符:' 转义符:\ 解析结果:3个字段 [a] [b\c] [d]
- 字段包含包围符:
跳过行数
-
作用:跳过 CSV 文件的前几行
-
类型:整数类型
-
默认值:0
-
特殊说明:
- 当 format 为
csv_with_names
时,系统会自动跳过首行(列名),忽略 skip_lines 参数 - 当 format 为
csv_with_names_and_types
时,系统会自动跳过前两行(列名和类型),忽略 skip_lines 参数
- 当 format 为
-
使用场景和示例:
- 跳过标题行:
数据文件: 姓名,年龄,城市 张三,25,北京 李四,30,上海参数设置: skip_lines:1 结果:跳过标题行,导入后续数据
- 跳过注释行:
数据文件: # 用户信息表 # 创建时间: 2024-01-01 张三,25,北京 李四,30,上海参数设置: skip_lines:2 结果:跳过注释行,导入后续数据
- 使用 csv_with_names 格式:
数据文件: name,age,city 张三,25,北京 李四,30,上海参数设置: format:csv_with_names 结果:系统自动跳过首行列名
- 使用 csv_with_names_and_types 格式:
数据文件: name,age,city string,int,string 张三,25,北京 李四,30,上海参数设置: format:csv_with_names_and_types 结果:系统自动跳过前两行的列名和类型信息
- 跳过标题行:
裁剪双引号
- 作用:裁剪掉 CSV 文件每个字段最外层的双引号
- 类型:布尔类型
- 默认值:false
- 使用场景和示例:
- 裁剪双引号:
数据文件: "张三","25","北京" "李四","30","上海"参数设置: trim_double_quotes:true 结果: 张三,25,北京 李四,30,上海
- 裁剪双引号:
压缩格式
- 作用:指定导入文件的压缩格式
- 类型:字符串, 忽略大小写
- 默认值:plain
- 支持的压缩格式:
- plain:不压缩(默认)
- bz2:BZIP2 压缩
- deflate:DEFLATE 压缩
- gz:GZIP 压缩
- lz4:LZ4 Frame 格式压缩
- lz4_block:LZ4 Block 格式压缩
- lzo:LZO 压缩
- lzop:LZOP 压缩
- snappy_block:SNAPPY Block 格式压缩
- 注意事项:
- tar 是一种文件打包格式,不属于压缩格式,因此不支持 .tar 文件
- 如需使用 tar 打包的文件,请先解包后再导入
使用示例
本节展示了不同导入方式下的 CSV 格式使用方法。
Stream Load 导入
# 指定分隔符
curl --location-trusted -u root: \-H "column_separator:," \-H "line_delimiter:\n" \-T example.csv \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load# 处理带引号的数据
curl --location-trusted -u root: \-H "column_separator:," \-H "enclose:\"" \-H "escape:\\" \-T example.csv \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load# 导入压缩文件
curl --location-trusted -u root: \-H "compress_type:gz" \-T example.csv.gz \http://<fe_host>:<fe_http_port>/api/test_db/test_table/_stream_load
Broker Load 导入
-- 指定分隔符
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv")INTO TABLE test_tableCOLUMNS TERMINATED BY ","LINES TERMINATED BY "\n"
)
WITH S3
(...
);-- 处理带引号的数据
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv")INTO TABLE test_tablePROPERTIES("enclose" = "\"","escape" = "\\")
)
WITH S3
(...
);-- 导入压缩文件
LOAD LABEL test_db.test_label
(DATA INFILE("s3://bucket/example.csv.gz")INTO TABLE test_tablePROPERTIES("compress_type" = "gz")
)
WITH S3
(...
);
Routine Load 导入
-- 指定分隔符
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
FROM KAFKA
(...
);-- 处理带引号的数据
CREATE ROUTINE LOAD test_db.test_job ON test_table
COLUMNS TERMINATED BY ","
PROPERTIES
("enclose" = "\"","escape" = "\\"
)
FROM KAFKA
(...
);
MySQL Load 导入
-- 指定分隔符
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n';-- 处理带引号的数据
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
PROPERTIES
("enclose" = "\"","escape" = "\\"
);-- 跳过表头
LOAD DATA LOCAL INFILE 'example.csv'
INTO TABLE test_table
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
TVF 导入
-- 指定分隔符
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv","format" = "csv","column_separator" = ",","line_delimiter" = "\n"...
);-- 处理带引号的数据
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv","format" = "csv","column_separator" = ",","enclose" = "\"","escape" = "\\"...
);-- 导入压缩文件
INSERT INTO test_table
SELECT *
FROM S3
("uri" = "s3://bucket/example.csv.gz","format" = "csv","compress_type" = "gz"...
);
相关文章:
doris: CSV导入数据
本文介绍如何在 Doris 中导入 CSV 格式的数据文件。Doris 支持灵活的 CSV 格式配置,包括自定义分隔符、字段包围符等,并提供多种导入方式以满足不同场景的数据导入需求。 导入方式 Doris 支持以下方式导入 CSV 格式数据: Stream LoadBro…...
FastStone Image Viewer图像处理软件安装步骤(百度网盘链接)
软件简介:一款小巧便捷的添加水印、特效、图片处理软件,让使用者可以通过它的操作界面来浏览图片,且还支持了幻灯播放的功能,让使用者能够轻松的浏览目录中的所有图片。 网盘链接:https://pan.baidu.com/s/1Zvrx7fXwb6…...

Kafka 深入服务端 — 时间轮
Kafka中存在大量的延迟操作,比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器,来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能,因为它们的插入和…...

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
一、前言 我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜…...
【go语言】结构体
一、type 关键字的用法 在 go 语言中,type 关键字用于定义新的类型,他可以用来定义基础类型、结构体类型、接口类型、函数类型等。通过 type 关键字,我们可以为现有类型创建新的类型别名或者自定义新的类型。 1.1 类型别名 使用 type 可以为…...
Spring Boot是什么及其优点
简介 Spring Boot是基于Spring框架开发的全新框架,其设计目的是简化Spring应用的初始化搭建和开发过程。 Spring Boot整合了许多框架和第三方库配置,几乎可以达到“开箱即用”。 优点 可快速构建独立的Spring应用。 直接嵌入Tomcat、Jetty和Underto…...
谷氨酸:大脑功能的多面手
标题:谷氨酸:大脑功能的多面手 文章信息摘要: 谷氨酸是大脑中最主要的兴奋性神经递质,参与了90%以上的神经元激活,在蛋白质合成、味觉(鲜味)以及神经可塑性中发挥重要作用。它与GABA、多巴胺等…...

SpringCloudGateWay和Sentinel结合做黑白名单来源控制
假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以࿱…...

HTML新春烟花
系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心(双心版)10…...
【Elasticsearch】中数据流需要配置索引模板吗?
是的,数据流需要配置索引模板。在Elasticsearch中,数据流(Data Streams)是一种用于处理时间序列数据的高级结构,它背后由多个隐藏的索引组成,这些索引被称为后备索引(Backing Indices࿰…...

Git进阶之旅:Git 配置信息 Config
Git 配置级别: 仓库级别:local [ 优先级最高 ]用户级别:global [ 优先级次之 ]系统级别:system [ 优先级最低 ] 配置文件位置: git 仓库级别对应的配置文件是当前仓库下的 .git/configgit 用户级别对应的配置文件时用…...

buu-pwn1_sctf_2016-好久不见29
这个也是栈溢出,不一样的点是,有replace替换,要输入0x3c字符(60),Iyou 所以,20个I就行,找后面函数 输出提示信息,要求用户输入关于自己的信息。 使用fgets函数从标准输入…...
ES2021+新特性、常用函数
一、ES2021新特性 ES2021 数字分隔符 let num 1234567 let num2 1_234_567 Promise.any 与 Promise.all 类似,Promise.any 也接受一个 Promise 的数组。当其中任何一个 Promise 完成(fullfill)时,就返回那个已经有完成值的 …...

STM32——LCD
一、引脚配置 查看引脚 将上述引脚都设置为GPIO_Output 二、导入驱动文件 将 LCD 驱动的 Inc 以及 Src 中的 fonts.h,lcd.h 和 lcd.c 导入到自己工程的驱动文件中。 当然,后面 lcd 的驱动学习可以和 IMX6U 一块学。 三、LCD函数 void LCD_Clear(u16 Color); 功能…...

【redis进阶】分布式锁
目录 一、什么是分布式锁 二、分布式锁的基础实现 三、引入过期时间 四、引入校验 id 五、引入lua 六、引入 watch dog (看门狗) 七、引入 Redlock 算法 八、其他功能 redis学习🥳 一、什么是分布式锁 在一个分布式的系统中,也会涉及到多个节点访问同一…...

园区管理系统如何提升企业核心竞争力与资产管理智能化水平
内容概要 在当今快节奏的商业环境中,园区管理系统正成为企业的重要合作伙伴,尤其在工业园、产业园、物流园、写字楼和公寓等多种类型的物业管理中。这个系统不仅仅是一个管理工具,它还是提升企业运营效率和核心竞争力的关键因素。通过智能化…...
AI大模型开发原理篇-3:词向量和词嵌入
简介 词向量是用于表示单词意义的向量, 并且还可以被认为是单词的特征向量或表示。 将单词映射到实向量的技术称为词嵌入。在实际应用中,词向量和词嵌入这两个重要的NLP术语通常可以互换使用。它们都表示将词汇表中的单词映射到固定大小的连续向量空间中…...

高精度算法:高精度减法
P2142 高精度减法 - 洛谷 | 计算机科学教育新生态 我们两个整数一定要是大数减去小数,所以这个点我们需要特判一下,那我们两个字符串表示的整型怎么判断大小呢,我们字典序比较大小和真实的数字比较大小是一样的,比如我们的‘21’…...

Java创建项目准备工作
新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径,如果已经配置好全局,就是正确路径不用管 修改项目字符集编码,将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…...
基于STM32的智能宠物喂食器设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 定时喂食模块远程控制与视频监控模块食物存量检测与报警模块语音互动与用户交互模块数据记录与智能分析模块 控制算法 定时与手动投喂算法食物存量检测与低存量提醒算法数据记录与远程反馈算法 代码实现 喂食控制代码存量检测…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...