clickhouse: ClickHouse のデフォルトの SQL ダイアレクトprql: パイプライン指向リレーショナルクエリ言語 (PRQL)kusto: Kusto クエリ言語 (KQL)trino: Trino SQL
dialect 設定で制御します。
Standard SQL
Standard SQL は、ClickHouse のデフォルトのクエリ言語です。パイプライン指向リレーショナルクエリ言語 (PRQL)
PRQL を有効にするには:Kusto クエリ言語 (KQL)
KQL を有効にするには:Query
Response
Trino SQL
Trino ダイアレクトを有効にするには:Query
Response
ARRAY[...] リテラル、TRY_CAST、UNNEST (ARRAY JOIN に変換されます) 、
ROW コンストラクタおよび型、VALUES テーブル、LIMIT より前の OFFSET、BETWEEN SYMMETRIC、および数百に及ぶ
関数を対象とします。これには、両システムに同名で存在しながら意味が異なる関数も含まれます (例えば、Trino の length
は Unicode コードポイントを数えるため、lengthUTF8 に変換されます) 。Trino の関数名と衝突しない ClickHouse 関数は
引き続き利用できるため、1 つのクエリ内で両方の関数群を混在させられます。
Trino の JSON 値は ClickHouse の JSON 型にマッピングされます。
JSON '...' リテラルと json_parse は JSON へのキャストになり、json_format は toJSONString になります。また、パス
関数 (json_extract、json_extract_scalar、json_value、json_query、json_exists、json_size) は
対応する ClickHouse の関数に変換されます。ClickHouse の JSON 型はオブジェクトを格納するため、オブジェクト以外のドキュメント
(トップレベルの配列やスカラー) は JSON 値として実体化される際に拒否されます。一方、パス関数は
任意の JSON テキストを受け付けます。
Trino の意味の一部は変換後のクエリテキストでは表現できないため、代わりにクエリのコンテキストに
適用されます。すなわち、外部結合は NULL を生成し (join_use_nulls) 、集合演算は Variant ではなく数値のスーパータイプを
使用し (use_variant_as_common_type) 、クエリアナライザが必須となります (enable_analyzer) 。ただし、クエリ内で明示的に指定された
SETTINGS 句は、これらよりも優先されます。
クエリレベルの変換では解消できない意味は、ClickHouse のものがそのまま適用されます。特に顕著なのは、
除算演算子 / が Trino では整数除算を行うのに対し ClickHouse では浮動小数点除算を行う点、および
round が Float 引数に対して ClickHouse では銀行家丸めを使用する点です。
クエリがどのように変換されるかを確認するには EXPLAIN SYNTAX を使用してください。