【ClickHouse实践】将函数应用于多个列

本文介绍如何通过SELECT...EXCEPT和COLUMNS/APPLY改进SQL,避免冗长并高效应用函数到多个列,如formatReadableSize,提升查询维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当编写 SQL 时,有时可能希望将相同的函数应用于多个列,这通常需要重复代码并且必须列出所有列,例如:

SELECT
    *,
    formatReadableSize(read_bytes) AS read_bytes_readable,
    formatReadableSize(written_bytes) AS written_bytes_readable,
    formatReadableSize(result_bytes) AS result_bytes_readable
FROM system.query_log
WHERE query_id = '56c3c260-34bc-4e35-88e7-07d50a04e8f9'

这会导致查询语句非常长且难以维护,尤其是随着查询大小的增长。此时可以使用SELECT ... EXCEPT语法,例如SELECT * EXCEPT (read_bytes, written_bytes, result_bytes)。这个语法允许从结果中删除提供的列子集。还可以使用COLUMNS表达式来选择列名中公共包含的字符串,例如 COLUMNS('bytes')将匹配到read_byteswritten_bytesresult_bytes这三列,类似like的用法,最后使用APPLY修饰符将函数应用于先前选择的每个列,例如APPLY formatReadableSize

完整的查询如下所示:

SELECT
    * EXCEPT (read_bytes, written_bytes, result_bytes),
    COLUMNS('bytes') APPLY formatReadableSize
FROM system.query_log
WHERE query_id = '56c3c260-34bc-4e35-88e7-07d50a04e8f9'

此 SQL等价于第一个 SQL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只努力的微服务

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值