前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据ClickHouse(十六):ClickHouse SQL语法之DML 操作

大数据ClickHouse(十六):ClickHouse SQL语法之DML 操作

原创
作者头像
Lansonli
发布2022-09-01 09:01:58
4750
发布2022-09-01 09:01:58
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

​ClickHouse SQL语法之DML 操作

DML:Data Manipulation Language,数据操纵语言。ClickHouse中DML语言包含插入、更新、删除数据操作,DML操作仅适用MergeTree引擎,不能针对主键、分区键、排序键进行DML操作,DML操作不支持事务,一旦执行成功会立刻生效。

一、​​​​​​​​​​​​​​Insert 插入

insert 向表中插入数据。

  • insert 语法:
代码语言:javascript
复制
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
或者
INSERT INTO [db.]table Select ...

  • 示例:
代码语言:javascript
复制
#创建表 t_insert ,这里使用MergeTree引擎
node1 :) create table t_insert (id UInt8 ,name String) engine = MergeTree() order by id ;

#向表 t_insert 中插入数据
node1 :) insert into t_insert values (1,'张三',18),(2,'李四',19);

#向表 t_insert 中插入数据
node1 :) insert into t_insert select * from t_insert;

二、​​​​​​​​​​​​​​update 更新

由于ClickHouse针对的是OLAP业务分析,Update操作在ClickHouse中不会经常使用。这种更新效率低下。

  • update 更新操作语法:
代码语言:javascript
复制
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

  • 示例:
代码语言:javascript
复制
#创建表 t_update,使用MergeTree引擎
node1 :) create table t_update (id UInt8,name String,age UInt8) engine = MergeTree() order by id ;

#向表 t_update中插入如下数据
node1 :) insert into t_update values (1,'张三',18),(2,'李四',19)
┌─id─┬─name─┬─age─┐
│  1 │ 张三 │  18 │
│  2 │ 李四 │  19 │
└────┴──────┴─────┘

#更新姓名为 张三的年龄为 22
node1 :) alter table t_update update age = 22 where name = '张三';
┌─id─┬─name─┬─age─┐
│  1 │ 张三 │  22 │
│  2 │ 李四 │  19 │
└────┴──────┴─────┘

三、delete 删除

由于ClickHouse针对的是OLAP业务分析,Delete操作与Update操作一样在ClickHouse中不会经常使用。这种删除效率低下。

  • delete 删除语法:
代码语言:javascript
复制
ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

  • 示例:
代码语言:javascript
复制
#创建表 t_delete,使用MergeTree引擎
node1 :) create table t_delete (id UInt8,name String,age UInt8) engine = MergeTree() order by id ;

#向表 t_delete中插入以下数据
node1 :) insert into t_update values (1,'张三',18),(2,'李四',19)
┌─id─┬─name─┬─age─┐
│  1 │ 张三 │  18 │
│  2 │ 李四 │  19 │
└────┴──────┴─────┘

#删除 张三 此条数据
node1 :) alter table t_delete delete where name = '张三';
┌─id─┬─name─┬─age─┐
│  2 │ 李四 │  19 │
└────┴──────┴─────┘

四、​​​​​​​​​​​​​​向表中导入导出数据

ClickHouse中支持多种数据格式数据导入和导出,支持格式有ORC,Parquet,Avro,Protobuf,xml,json,csv等,具体操作参照官网:https://clickhouse.tech/docs/en/sql-reference/statements/alter/update/。下面以向表导入导出CSV格式数据为例操作:

  • 示例:
代码语言:javascript
复制
#创建表 t_csv ,执行引擎为MergeTree
node1 :) create table t_csv (id UInt8,name String,age UInt8) engine = MergeTree order by id;

#在ClickHouse客户端准备数据文件 csvdata 写入以下数据
vim /root/csvdata
1,张三,18
2,李四,19
3,王五,20
4,马六,21
5,田七,22
#导入数据,在ClickHouse-client中执行导入数据命令
[root@node1 ~]# clickhouse-client --format_csv_delimiter="," --query="INSERT INTO newdb.t_csv FORMAT CSV" < /root/csvdata

注意:--format_csv_delimiter 指定分隔符

#进入ClickHouse客户端查看表 t_csv中的数据
node1 :) select * from t_csv;

┌─id─┬─name─┬─age─┐
│  1 │ 张三 │  18 │
│  2 │ 李四 │  19 │
│  3 │ 王五 │  20 │
│  4 │ 马六 │  21 │
│  5 │ 田七 │  22 │
└────┴──────┴─────┘

#导出数据,在ClickHouse-client中执行命令,将数据导入到result文件中
[root@node1 ~]# clickhouse-client --format_csv_delimiter="|" --query="select * from newdb.t_csv FORMAT CSV" > /root/result

#查看导出的结果数据
[root@node1 ~]# cat result 
1|"张三"|18
2|"李四"|19
3|"王五"|20
4|"马六"|21
5|"田七"|22

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ​ClickHouse SQL语法之DML 操作
    • 一、​​​​​​​​​​​​​​Insert 插入
      • 二、​​​​​​​​​​​​​​update 更新
        • 三、delete 删除
          • 四、​​​​​​​​​​​​​​向表中导入导出数据
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档