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

相关推荐
毕设源码-朱学姐9 分钟前
【开题答辩全过程】以 办公自动化管理系统为例,包含答辩的问题和答案
java·eclipse
李宥小哥3 小时前
C#基础11-常用类
android·java·c#
北海-cherish3 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
小许学java4 小时前
数据结构-ArrayList与顺序表
java·数据结构·顺序表·arraylist·线性表
2501_915909064 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5
white-persist5 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农5 小时前
Centos7 maven 安装
java·python·centos·maven
harmful_sheep5 小时前
maven mvn 安装自定义 jar 包
java·maven·jar
新中地GIS开发老师5 小时前
Cesium 军事标绘入门:用 Cesium-Plot-JS 快速实现标绘功能
前端·javascript·arcgis·cesium·gis开发·地理信息科学
Superxpang5 小时前
前端性能优化
前端·javascript·vue.js·性能优化