clickhouse插入数据

clickhouse中插入数据,最好性能是按照指定格式插入文件,这样是ck擅长的,因为ck是写入block的,每个block的大小在配置文件中设置有,这样在数据未写满block的时候,要么写成功要么写失败,不能部分成功。

ck写入没有写满block的时候的原子性,只有在只有在ClickHouse服务端处理数据的时候才具有这种原子写入的特性,例如使用JDBC或者HTTP接口时

4.4.1 插入数据

INSERT语句支持三种语法范式,三种范式各有不同,可以根据写入的需求灵活运用。

4.4.1.1 第一种方式

使用VALUES格式的常规语法:

INSERT INTO [db.]table [(c1, c2, c3...)] VALUES (v11, v12, v13...), (v21, v22, v23...), ...

其中,c1、c2、c3是列字段声明,可省略。VALUES后紧跟的是由元组组成的待写入数据,通过下标位与列字段声明一一对应。数据支持批量声明写入,多行数据之间使用逗号分隔。例如执行下面的语句,将批量写入多条数据:

insert into log values(1,'2021-04-21 00:00:00'),(2,'2021-05-22 00:00:00'),(3,'2021-05-23 00:00:00'),(4,'2021-04-21 00:00:00');

insert into log values(1,'2021-05-21 00:00:00');

4.4.1.2 第二种方式

使用指定格式的语法:

INSERT INTO [db.]table [(c1, c2, c3...)] FORMAT format_name data_set

cat data.tsv | clickhouse-client -q 'insert into test_db.log1 format TSV'

clickhouse-client --format_csv_delimiter="," --query="INSERT INTO tb_client FORMAT CSV" < ./app.csv

示例:

静态数据: cat user.txt

1,zss,23,BJ,M

2,lss,33,NJ,M

3,ww,21,SH,F

create table test_load1(

id UInt8 ,

name String ,

age UInt8 ,

city String ,

gender String

)engine=Log ;

-- 将数据导入到表中

cat user.txt | clickhouse-client -q 'insert into default.test_load1 format CSV'

clickhouse-client -q 'insert into default.test_load1 format CSV' < user.txt

上面的两种方式都可以将数据导入到表中

-- 我们还可以执行数据行属性的分割符

clickhouse-client --format_csv_delimiter=',' -q 'insert into default.test_load1 format CSV' < user.txt

4.4.1.3 第三种方式

使用SELECT子句形式的语法:

INSERT INTO [db.]table [(c1, c2, c3...)] SELECT ...

虽然VALUES和SELECT子句的形式都支持声明表达式或函数,但是表达式和函数会带来额外的性能开销,从而导致写入性能的下降。所以如果追求极致的写入性能,就应该尽可能避免使用它们。

Create table log3 as log2 ;

Insert into log3 select * from log2 ;

ClickHouse内部所有的数据操作都是面向Block数据块的,所以INSERT查询最终会将数据转换为Block数据块。也正因如此,INSERT语句在单个数据块的写入过程中是具有原子性的。在默认的情况下,每个数据块最多可以写入1048576行数据(由max_insert_block_size参数控制)。也就是说,如果一条INSERT语句写入的数据少于max_insert_block_size行,那么这批数据的写入是具有原子性的,即要么全部成功,要么全部失败。需要注意的是,只有在ClickHouse服务端处理数据的时候才具有这种原子写入的特性,例如使用JDBC或者HTTP接口时。因为max_insert_block_size参数在使用CLI命令行或者INSERT SELECT子句写入时是不生效的。

相关推荐
Mr_sun.2 分钟前
Day09——入退管理-入住-2
android·java·开发语言
MAGICIAN...13 分钟前
【java-软件设计原则】
java·开发语言
Ticnix14 分钟前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人17 分钟前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
JH307319 分钟前
为什么switch不支持long
java
twl21 分钟前
OpenClaw 深度技术解析
前端
崔庆才丨静觅24 分钟前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人32 分钟前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼36 分钟前
shadcn/ui,给你一个真正可控的UI组件库
前端
盐真卿37 分钟前
python第八部分:高级特性(二)
java·开发语言