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

当编写 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。

猜你喜欢

转载自blog.csdn.net/weixin_39992480/article/details/128009187
今日推荐