> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 代替のクエリ言語

> ClickHouseで代替のクエリ言語を使用する

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            実験的な機能
        </a>;
};

Standard SQL に加えて、ClickHouse はデータのクエリに使用できるさまざまな代替クエリ言語をサポートしています。

現在サポートされているダイアレクトは次のとおりです。

* `clickhouse`: ClickHouse のデフォルトの [SQL ダイアレクト](/ja/chdb/reference/sql-reference)
* `prql`: [パイプライン指向リレーショナルクエリ言語 (PRQL)](https://prql-lang.org/)
* `kusto`: [Kusto クエリ言語 (KQL)](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query)
* `trino`: [Trino SQL](https://trino.io/docs/current/language.html)

使用するクエリ言語は、`dialect` 設定で制御します。

<h2 id="standard-sql">
  Standard SQL
</h2>

Standard SQL は、ClickHouse のデフォルトのクエリ言語です。

```sql theme={null}
SET dialect = 'clickhouse'
```

<h2 id="pipelined-relational-query-language-prql">
  パイプライン指向リレーショナルクエリ言語 (PRQL)
</h2>

<ExperimentalBadge />

PRQL を有効にするには:

```sql theme={null}
SET allow_experimental_prql_dialect = 1; -- このSETステートメントはClickHouse v25.1以降でのみ必要です
SET dialect = 'prql'
```

PRQLクエリの例:

```prql theme={null}
from trips
aggregate {
    ct = count this
    total_days = sum days
}
```

内部的には、ClickHouse は PRQL を SQL にトランスパイルして、PRQL クエリを実行します。

<h2 id="kusto-query-language-kql">
  Kusto クエリ言語 (KQL)
</h2>

<ExperimentalBadge />

KQL を有効にするには:

```sql theme={null}
SET allow_experimental_kusto_dialect = 1; -- このSETステートメントはClickHouseバージョン25.1以降でのみ必要です
SET dialect = 'kusto'
```

```kql title="Query" theme={null}
numbers(10) | project number
```

```response title="Response" theme={null}
┌─number─┐
│      0 │
│      1 │
│      2 │
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
│      9 │
└────────┘
```

KQL クエリでは、ClickHouse で定義されているすべての関数を利用できるとは限りません。

<h2 id="trino-sql">
  Trino SQL
</h2>

<ExperimentalBadge />

Trino ダイアレクトを有効にするには:

```sql theme={null}
SET enable_trino_dialect = 1;
SET dialect = 'trino'
```

Trino 固有の構文は ClickHouse SQL に変換され、Trino の関数名は ClickHouse の同等の関数にマッピングされます。

```sql title="Query" theme={null}
SELECT approx_distinct(x) FROM (VALUES 1, 2, 2) AS t(x)
```

```response title="Response" theme={null}
┌─uniq(x)─┐
│       2 │
└─────────┘
```

この変換は、とりわけ `ARRAY[...]` リテラル、`TRY_CAST`、`UNNEST` (`ARRAY JOIN` に変換されます) 、
`ROW` コンストラクタおよび型、`VALUES` テーブル、`LIMIT` より前の `OFFSET`、`BETWEEN SYMMETRIC`、および数百に及ぶ
関数を対象とします。これには、両システムに同名で存在しながら意味が異なる関数も含まれます (例えば、Trino の `length`
は Unicode コードポイントを数えるため、`lengthUTF8` に変換されます) 。Trino の関数名と衝突しない ClickHouse 関数は
引き続き利用できるため、1 つのクエリ内で両方の関数群を混在させられます。

Trino の `JSON` 値は ClickHouse の [`JSON`](/ja/reference/data-types/newjson) 型にマッピングされます。
`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` を使用してください。
