clickhouse的几个进阶语法

简介: 包含如何实现分时统计,如何实现聚合某一列,如何更新操作

一、背景

  前面发布了一篇关于clickhouse常用的基础语法,有很多浏览量,这次给小伙伴分享几个进阶语法,比如如何实现分时统计,当然是通过我们的toStartOfDay()语法实现的,如何实现聚合某一列,如何更新操作,我会举几个例子供大家参考使用。
   想了解其他数据库语法,请看。

clickhouse的常用语法你知道吗
Mysql数据库常用命令总结
关于PostgreSQL数据增删改查的日常总结(主要jsonb类型)

二、更新语法

1、更新满足条件的数据列
ALTER TABLE mytable.mytable
UPDATE
    mytableType = 'A'
WHERE
    `time` >'2021-10-07'
2、更新表注释
ALTER TABLE table_with_comment MODIFY COMMENT 'new comment on a table';
1、重命名表的某一列
ALTER TABLE visits RENAME COLUMN webBrowser TO browser
1、更新某一列的字段类型
ALTER TABLE visits MODIFY COLUMN browser Array(String)

三、分时统计

  在开发中我们可能会有需求去计算每一条的订单数量返回给前台,假如我们通过常规的方法,开始时间大于早上零点,结束时间小于晚上24点,虽然可以满足需求,但是需要for循环多次查询获取每一条的数据,肯定效率低了,而且我们用的是clickhouse,号称最快的数据库,这么搞肯定没有用到极致,那么我们可以使用这么多方法,一次查询,返回所以结果,如下。

  • toStartOfHour()
  • toStartOfInterval()
  • toStartOfFifteenMinutes()
  • toStartOfFiveMinute()
  • toStartOfMonth()
  • toStartOfQuarter()
  • toStartOfWeek()
  • toStartOfDay()
1、按天分组求每一天的订单数
SELECT
    toStartOfDay(time) time_interval ,
    sum(order_num) num
FROM
    mytable.mytable
GROUP BY
    toStartOfDay(order_num)

我们有这么多方法,看到字面意思应该就明白了吧。

2、完成间隔5分钟的分时统计
select 
toStartOfInterval(time, INTERVAL 5  minute) as minute,
count() as sumcount
from table_all
group by minute 
order by sumcount desc;
3、获取过去七天的分时统计数据

  numbers(7)是我们的参照表,假如不使用,当某一天数据库里没有数据就不会查询出来,这样我们想获取七天的数据就会不够七天,不方便我们在代码中写业务逻辑,所以我们使用了一个参照表。

SELECT
        any(toDate(time)),
        any(num)
FROM
        (
                SELECT
                        toStartOfDay(toDate(toUnixTimestamp(now64(3), 'Asia/Shanghai')-number*3600*24)) time,
                        toUInt16(0) AS num
                FROM
                        numbers(7)
                
                UNION ALL
                
                SELECT
                        toStartOfDay(time) AS time,
                        count(*)           as num
                FROM
                        mytable.mytable
                group by
                        time
        )
GROUP BY
        time
ORDER BY
        time
4、带where条件的分时统计

  获取过去1000天的统计,当天没有数据的赋值为0。

SELECT
        toDate(time) as time,
        num
FROM
        (
                SELECT
                        toStartOfDay(toDate(toUnixTimestamp(now64(3), 'Asia/Shanghai')-number*3600*24)) time,
                        toUInt16(0) AS num
                FROM
                        numbers(1000)
                 
                UNION ALL
                 
                SELECT
                        toStartOfDay(time) AS time,
                        count(*)           as num
                FROM 
                        mytable.mytable   
                group by
                        time
        )
        
        
        where time >'2021-10-01'  and time <'2021-10-06'
GROUP BY
        time ,num
ORDER BY
        time   
5、按秒查询进行统计
SELECT
        time as time,
        num
FROM
        (
                SELECT
                        toStartOfSecond(toDateTime64(toUnixTimestamp(now()), 3)-number) time,
                        0 as num
                FROM
                        numbers(100000)
                  
                UNION ALL
                  
                SELECT
                        toStartOfSecond(thisTime) AS thisTime,
                        count(*)           as num
                FROM
                        mytable.mytable  where devIp ='1'
                group by
                        thisTime
        )
         
         
        where time >'2022-01-01'  and time <'2022-01-12'
GROUP BY
        time ,num
ORDER BY
        time

四、聚合某列

1、按地区分组聚合手机号

这个vm_concat方法可以将某个字段聚合到一个字段里,以逗号分割,我们查询结束后在代码中通过split(",")可以很方便获取某一个组的数据。

SELECT
    phone_attr AS area,
    wm_concat(phone_ip) AS phoneIps
FROM
    xda_phone
GROUP BY
    phone_attr

我们有这么多方法,看到字面意思应该就明白了吧。

三、总结

  以上就是就是关于clickhouse数据库进阶语法,包含如何实现分时统计,如何实现聚合某一列,如何更新操作,可以参考一下,觉得不错的话,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。

目录
相关文章
|
关系型数据库 Java MySQL
clickhouse的常用语法你知道吗
clickhouse数据库,总结了一些常用的语法
752 0
clickhouse的常用语法你知道吗
|
存储 SQL 关系型数据库
ClickHouse常见数据类型以及常用SQL语法
ClickHouse常见数据类型以及常用SQL语法
|
4月前
|
存储 监控 大数据
探究ClickHouse数据库的Mutation机制
ClickHouse的Mutation机制提供了一种高效的方式来处理大数据集上的修改操作。然而,需要注意的是,由于其异步和资源密集的特性,应当谨慎地进行规划和优化,以确保系统的整体性能。通过合理地使用Mutation操作,可以在保证数据一致性的同时,有效地管理和分析大规模数据集。
238 18
|
7月前
|
存储 监控 分布式数据库
ClickHouse分布式数据库动态伸缩(弹性扩缩容)的实现
实现ClickHouse数据库的动态伸缩需要持续的维护和精细的操作。从集群配置到数据迁移,再到监控和自动化,每一步都要仔细管理以确保服务的可靠性和性能。这些活动可以显著提高应用的响应性和成本效率,帮助业务根据实际需求灵活调整资源分配。
424 10
|
9月前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
378 9
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
SQL Unix OLAP
ClickHouse安装教程:开启你的列式数据库之旅
ClickHouse 是一个高性能的列式数据库管理系统,适用于在线分析处理(OLAP)。本文介绍了 ClickHouse 的基本使用步骤,包括下载二进制文件、安装应用、启动服务器和客户端、创建表、插入数据以及查询新表。还提到了图形客户端 DBeaver 的使用,使操作更加直观。通过这些步骤,用户可以快速上手并利用 ClickHouse 的强大性能进行数据分析。
1500 4
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景

热门文章

最新文章

推荐镜像

更多