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数据库,总结了一些常用的语法
403 0
clickhouse的常用语法你知道吗
|
存储 SQL 关系型数据库
ClickHouse常见数据类型以及常用SQL语法
ClickHouse常见数据类型以及常用SQL语法
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
5天前
|
SQL Unix OLAP
ClickHouse安装教程:开启你的列式数据库之旅
ClickHouse 是一个高性能的列式数据库管理系统,适用于在线分析处理(OLAP)。本文介绍了 ClickHouse 的基本使用步骤,包括下载二进制文件、安装应用、启动服务器和客户端、创建表、插入数据以及查询新表。还提到了图形客户端 DBeaver 的使用,使操作更加直观。通过这些步骤,用户可以快速上手并利用 ClickHouse 的强大性能进行数据分析。
34 4
|
2月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
3月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
6月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之建了 polar 与clickhouse的数据源。为什么数据库这里总是mysql呢
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
存储 大数据 关系型数据库
从 ClickHouse 到阿里云数据库 SelectDB 内核 Apache Doris:快成物流的数智化货运应用实践
目前已经部署在 2 套生产集群,存储数据总量达百亿规模,覆盖实时数仓、BI 多维分析、用户画像、货运轨迹信息系统等业务场景。