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_bytes
written_bytes
result_bytes
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に相当します。