大数据ClickHouse进阶(八):ClickHouse的with子句
数据 with 进阶 ClickHouse 子句
2023-06-13 09:12:47 时间
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 │
└──────────┴─────────────────────┴────────────────────────┘
相关文章
- 2022年编程语言排名,官方数据来了,让人大开眼界。「建议收藏」
- SAP UI5 Table 控件数据进行 Excel 导出时如何进行格式控制
- 实战 | 如何用 Python 统计 Jira 数据并可视化
- 大数据必学Java基础(五十九):Map接口源码部分
- 数据导入与预处理-第8章-实战演练-数据分析师岗位分析
- 如何轻松做数据治理?开源技术栈告诉你答案
- SQL Server数据转码实现快速运算(sqlserver转码)
- 提升Oracle口令复杂度,提高数据安全性(oracle口令复杂度)
- 语句掌握Oracle中用WITH语句的利用技巧(oracle的with)
- 数据查询MySQL中查询指定日期数据的方法(mysql指定日期)
- 数据迁移 MySQL数据迁移至E4A环境(e4amysql)
- 类型MySQL中的二进制数据类型(mysql二进制数据)
- MySQL批量清空表:快速简单!(mysql批量清空表数据)
- C语言操作Redis:实现高效数据存储(c操作redis)
- Efficiently copying data in bulk with MySQL(mysql批量复制数据)
- Efficient Oracle Data Migration Made Easy with Top Tools(oracle数据迁移工具)
- Top 10 Results: How to Retrieve Data Efficiently with MySQL(mysql取前十条数据)
- Oracle 中的 WITH 语句使用技巧(oracle with用法)
- MySQL表数据容量大小分析及优化(mysql 表数据 大小)
- 据MSSQL帮助你管理数据更轻松(mssql 记录数)
- 查询MySQL按月进行分组查询 得到准确的数据统计结果(mysql 按月分组)
- mssql查询第二条数据的技巧(mssql查询第二条数据)
- 用CMD执行MySQL数据导入(cmd执行mysql导入)
- 极速存取用Redis管理数据字典(数据字典存在redis)
- 多线程提升Redis中数据的有效性(多线程更新redis的值)
- MySQL查询优化使用WITH子句的限制与替代方案(mysql不能用with)
- 探究MySQL查询慢的原因,上亿数据背后瓶颈何在(mysql上亿查询慢原因)
- Oracle中利用WITH子句的使用(oracle中的with)
- 使用Oracle SQL处理文本数据的方法(oracle sql文本)
- Oracle OE对象实现高效数据存储(oracle oe对象)