【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また、式を使用して、列名に一般的に含まれる文字列を選択することもできます。たとえば、 like の使用法と同様にの 3 つの列COLUMNS('bytes')に一致し、最後に修飾子を使用して関数を各列に適用することもできます。たとえば、 を選択しますread_byteswritten_bytesresult_bytesAPPLYAPPLY 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