clickhouse的常用语法你知道吗

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。

一、背景

    最近工作中经常使用clickhouse数据库,总结了一些常用的语法,想着分享一下,大家肯定能够用到,内容有点难度,第一遍看不懂,可以收藏后面再看,欢迎收藏点赞。
   想了解其他数据库语法,请看

Mysql数据库常用命令总结
关于PostgreSQL数据增删改查的日常总结(主要jsonb类型)

二、语法

1、变更clickhouse表字段类型
alter table mytable.mytable modify column trans_proto String
2、重命名表名
rename table mytable.mytable to mytable.mytable_del
3、添加表字段

(1)找到mytable表,搜索最后一个字段,添加加新字段。

alter table mytable.mytable add column `uuid` String;
4、删除测试数据
ALTER TABLE  mytable.mytable delete  where uuid ='AAAAAAAAAAAAAAAA'
5、删除表结构
drop table [if exists] db.name
6、重置某一列的值
alter table tb_name clear column name;
7、创建物化视图

(1)这个物化视图每次插入数据后,会将数据写入relation_real表中。但是创建物化视图之前历史的数据不会写入。

CREATE MATERIALIZED VIEW mytable.test_relation TO mytable.relation_real (
 `src` String,
 `dstion` String,
 `srcPnt` Int64,
 `dstPnt` Int64,
 `state` Int64,
 `thisTime` DateTime64(3, 'Asia/Shanghai')
) AS
SELECT e.src AS src, e.dstion AS dstion, e.srcPnt AS srcPnt, e.dstPnt AS dstPnt, any(e.pktsToIt) AS state, max(thisTime) AS thisTime
FROM mytable.test AS e INNER JOIN (SELECT src, dstion, srcPnt, dstPnt, max(thisTime) AS time
FROM mytable.test
GROUP BY src, dstion, srcPnt, dstPnt) AS sub ON (e.thisTime = sub.time) AND (e.src = sub.src) AND (e.dstion = sub.dstion) AND (e.srcPnt = sub.srcPnt) AND (e.dstPnt = sub.dstPnt)
GROUP BY e.src, e.dstion, e.srcPnt, e.dstPnt
8、创建表
CREATE TABLE mytable.test (
 `thisTime` DateTime64(3, 'Asia/Shanghai'),
 `src` String,
 `srcPnt` Int64,
 `dstion` String,
 `dstPnt` Int64,
 `pktsToIt` Int64,
 `pktsToIt` Int64,
 `state` String
) 
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(thisTime)
ORDER BY thisTime TTL toDateTime(thisTime) + toIntervalMonth(1)
SETTINGS index_granularity = 8192
9、获取分组后最新的记录
SELECT e.src, e.dstion, e.srcPnt, e.dstPnt,,max(e.thisTime) AS time, any(e.state) AS state
FROM mytable.mytable_book AS e INNER JOIN (SELECT src, dstion, srcPnt, dstPnt, max(thisTime) AS time
FROM mytable.mytable_book
GROUP BY src, dstion, srcPnt, dstPnt) AS sub ON (e.thisTime = sub.time) AND (e.src = sub.src) AND (e.dstion = sub.dstion) AND (e.srcPnt = sub.srcPnt) AND (e.dstPnt = sub.dstPnt)
GROUP BY e.src, e.dstion, e.srcPnt, e.dstPnt
10、获取分组后最新的数据,创建视图
CREATE VIEW mytable.asset_relation1 (
 `src` String,
 `dstion` String,
 `srcPnt` Int64,
 `dstPnt` Int64,
  `time` DateTime64(3, 'Asia/Shanghai'),
 `state` Int64
) AS 
SELECT e.src, e.dstion, e.srcPnt, e.dstPnt,max(e.thisTime) AS time,any(e.state) AS state
FROM mytable.mytable_book AS e INNER JOIN (SELECT src, dstion, srcPnt, dstPnt, max(thisTime) AS time
FROM mytable.mytable_book
GROUP BY src, dstion, srcPnt, dstPnt) AS sub ON (e.thisTime = sub.time) AND (e.src = sub.src) AND (e.dstion = sub.dstion) AND (e.srcPnt = sub.srcPnt) AND (e.dstPnt = sub.dstPnt)
GROUP BY e.src, e.dstion, e.srcPnt, e.dstPnt
11、从一张表插入到另一张表
INSERT INTO <new_table_name> SELECT * FROM <damaged_table_name>
12、clickhouse多个字段作为分区
PARTITION BY (toYYYYMMDD(thisTime),
 infoType)
13、clickhouse的数据备份还原

(1)备份某个分区的数据

ALTER TABLE mytable.mytabletest freeze PARTITION (20220107,2) 

(2)清除分区数据

ALTER TABLE mytable.mytabletest detach PARTITION (20220107,2) 

(3)还原分区数据

ALTER TABLE mytable.mytabletest attach PARTITION (20220107,2) 
14、插入物化视图带历史数据

因为我们使用了PARTITION 参数,所以会在创建视图之后,将历史表数据插入一遍。不使用的话就无法插入历史数据了,新写入的才会插入。

CREATE  MATERIALIZED VIEW mytable.mytabledailycountv3 
(
    `day` Date,
    `src` String,
    `dstion` String,
     `srcv6` String,
    `dstionv6` String,
    `ruleId` UInt64,
    `devIp` String,
    `infoType` UInt16,
    `count` SimpleAggregateFunction(sum, UInt64)
) 
ENGINE = AggregatingMergeTree
PARTITION BY toYYYYMMDD(day)
ORDER BY (day, src, dstion, ruleId, devIp, infoType)
TTL day + toIntervalMonth(12)
SETTINGS index_granularity = 8192
POPULATE AS
SELECT
    toDate(occurTime) AS day,
    src,
    dstion,
    any(srcv6) as srcv6,
    any(dstionv6) as dstionv6,
    ruleId,
    devIp,
    infoType,
    count() AS count
FROM mytable.mytable
GROUP BY day, src, dstion, ruleId, devIp, infoType;

三、总结

   以上就是就是关于clickhouse数据库常用语法,可以参考一下,觉得不错的话,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卧龙不言

欢迎关注java基础笔记公众号

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值