当前位置:首页 > 技术分析 > 正文内容

大数据ClickHouse进阶(八):ClickHouse的with子句

ruisui8816小时前技术分析1

#头条创作挑战赛#

ClickHouse的with子句


ClickHouse支持with子句以增强语句的表达,例如如下查询:


node1 :) SELECT pow(pow(2,2),3)
┌─pow(pow(2, 2), 3)─┐
│                64 │
└───────────────────┘



我们可以通过使用with子句进行简化,提高可读性:


node1 :) WITH pow(2,2) AS a SELECT power(a,3)
┌─pow(a, 3)─┐
│        64 │
└───────────┘



with的使用支持如下四种用法:


一、定义变量


可以通过with定义变量,这些变量在后续的查询子句中可以直接访问。


例如:


node1 :) WITH 10 AS start
SELECT number
FROM system.numbers
WHERE number > start
LIMIT 5
┌─number─┐
│     11 │
│     12 │
│     13 │
│     14 │
│     15 │
└────────┘



二、调用函数


可以访问select子句中的列字段,并调用函数做进一步处理,处理之后的数据可以在select子句中继续使用。


例如:


node1 :) WITH SUM(data_uncompressed_bytes) AS bytes
SELECT
    database,
    formatReadableSize(bytes) AS format
FROM system.columns
GROUP BY database
ORDER BY bytes DESC

┌─database─┬─format─────┐
│ datasets │ 7.40 GiB   │
│ system   │ 197.27 MiB │
│ default  │ 0.00 B     │
└──────────┴────────────┘



三、定义子查询


可以使用with定义子查询,例如,借助子查询可以得出各database未压缩数据大小与数据总和大小的比例排名:


node1 :) WITH (
        SELECT SUM(data_uncompressed_bytes)
        FROM system.columns
    ) AS total_bytes
SELECT
    database,
    (SUM(data_uncompressed_bytes) / total_bytes) * 100 AS database_disk_usage
FROM system.columns
GROUP BY database
ORDER BY database_disk_usage DESC

┌─database─┬─database_disk_usage─┐
│ datasets │   97.31767735000648 │
│ system   │   2.682322649993527 │
│ default  │                   0 │
└──────────┴─────────────────────┘



注意:在with中使用子查询时智能返回一行数据,如果结果集大于一行则报错。


四、在子查询中重复使用with


在子查询中可以嵌套使用With子句,例如,在计算出各database未压缩数据大小与数据总和的比例之后,又进行取整函数操作:


node1 :) WITH round(database_disk_usage) AS database_disk_usage_v1
SELECT
    database,
    database_disk_usage,
    database_disk_usage_v1
FROM
(
    WITH (
            SELECT SUM(data_uncompressed_bytes)
            FROM system.columns
        ) AS total_bytes
    SELECT
        database,
        (SUM(data_uncompressed_bytes) / total_bytes) * 100 AS database_disk_usage
    FROM system.columns
    GROUP BY database
    ORDER BY database_disk_usage DESC
)

┌─database─┬─database_disk_usage─┬─database_disk_usage_v1─┐
│ datasets │    97.2911778785499 │                     97 │
│ system   │  2.7088221214500954 │                      3 │
│ default  │                   0 │                      0 │
└──────────┴─────────────────────┴────────────────────────┘

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4508.html

标签: group by desc
分享给朋友:

“大数据ClickHouse进阶(八):ClickHouse的with子句” 的相关文章

Linux 最主要的发行分支

Linux 有数百个发行分支。主要的有以下四个。slackwareSlackware 是由 Patrick Volkerding 在 1992 年推出的,它是全球现存最古老的 Linux 发行版。Slackware 被设计为高度可定制和强大的,并且要求用户了解 每个元素,它的包系统是不支持依赖的。...

vue中如何在自定义组件上使用v-model和.sync

自定义事件tips推荐始终使用 kebab-case 的事件名。(v-on会将事件名自动转换为小写,避免匹配不到)changeData ×change-data √自定义组件的v-model用法:父组件定义数据源(不需要定义修改数据的方法),在子组件标签上通过v-model="data...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

编码 10000 个小时后,开发者悟了:“不要急于发布!”

【CSDN 编者按】在软件开发的道路上,时间是最好的老师。根据“一万小时定律”,要成为某个领域的专家,通常需要大约一万小时的刻意练习。本文作者身为一名程序员,也经历了一万小时的编程,最终悟出了一个道理:慢即是快,重视架构设计和代码质量,确保每一行代码都经得起时间的考验。作者 | Sotiris Ko...

K8S NFS 共享存储

NFS 共享存储前面我们学习了 hostPath 与 Local PV 两种本地存储方式,但是平时我们的应用更多的是无状态服务,可能会同时发布在不同的节点上,这个时候本地存储就不适用了,往往就需要使用到共享存储了,比如最简单常用的网络共享存储 NFS,本节课我们就来介绍下如何在 Kubernetes...

HTML5最新版本介绍

HTML5是HTML4.01和XHTML1.0之后超文本标记语言的最新版本,由一群自由思想者设计,最终实现了多媒体支持、交互性、更智能的表单和更好的语义标注。 HTML 5不只是 HTML规范的最新版本,它是用于生成现代 Web内容的一系列相关技术的总称,其中最重要的三个技术是:HTML5核心规范...