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子句写入时是不生效的。

相关推荐
索迪迈科技14 分钟前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
十碗饭吃不饱16 分钟前
net::ERR_EMPTY_RESPONSE
java·javascript·chrome·html5
白初&24 分钟前
SpringBoot后端基础案例
java·spring boot·后端
哈基米喜欢哈哈哈29 分钟前
ThreadLocal 内存泄露风险解析
java·jvm·面试
Zz_waiting.39 分钟前
Javaweb - 14.6 - Vue3 数据交互 Axios
开发语言·前端·javascript·vue·axios
萌新小码农‍42 分钟前
Java分页 Element—UI
java·开发语言·ui
鼠鼠我捏,要死了捏1 小时前
深入实践G1垃圾收集器调优:Java应用性能优化实战指南
java·g1·gc调优
切糕师学AI1 小时前
前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析
前端·vue.js·node.js
书院门前细致的苹果1 小时前
ArrayList、LinkedList、Vector 的区别与底层实现
java
再睡亿分钟!1 小时前
Spring MVC 的常用注解
java·开发语言·spring boot·spring