> ## 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.

# Linguagens de consulta alternativas

> Use linguagens alternativas de consulta no 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>
            Recurso experimental
        </a>;
};

Além do SQL padrão, o ClickHouse suporta várias linguagens de consulta alternativas para consultar dados.

Os dialetos atualmente suportados são:

* `clickhouse`: O [dialeto SQL](/pt-BR/chdb/reference/sql-reference) padrão do ClickHouse
* `prql`: [Linguagem de consulta relacional em pipeline (PRQL)](https://prql-lang.org/)
* `kusto`: [Linguagem de Consulta Kusto (KQL)](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query)
* `trino`: [Trino SQL](https://trino.io/docs/current/language.html)

A linguagem de consulta usada é controlada pela configuração `dialect`.

<h2 id="standard-sql">
  SQL padrão
</h2>

SQL padrão é a linguagem de consulta padrão do ClickHouse.

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

<h2 id="pipelined-relational-query-language-prql">
  Linguagem de consulta relacional em pipeline (PRQL)
</h2>

<ExperimentalBadge />

Para ativar o PRQL:

```sql theme={null}
SET allow_experimental_prql_dialect = 1; -- este SET statement é necessário apenas para versões do ClickHouse >= v25.1
SET dialect = 'prql'
```

Exemplo de consulta em PRQL:

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

Nos bastidores, o ClickHouse usa a transpilação de PRQL para SQL para executar consultas PRQL.

<h2 id="kusto-query-language-kql">
  Linguagem de Consulta Kusto (KQL)
</h2>

<ExperimentalBadge />

Para ativar o KQL:

```sql theme={null}
SET allow_experimental_kusto_dialect = 1; -- este SET statement é necessário apenas para versões do 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 │
└────────┘
```

Observe que as consultas KQL talvez não consigam acessar todas as funções definidas no ClickHouse.

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

<ExperimentalBadge />

Para habilitar o dialeto Trino:

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

A sintaxe específica do Trino é convertida para ClickHouse SQL, e os nomes das funções do Trino são mapeados para seus equivalentes no 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 │
└─────────┘
```

A tradução cobre, entre outras coisas, literais `ARRAY[...]`, `TRY_CAST`, `UNNEST` (traduzido para `ARRAY JOIN`),
construtores e tipos `ROW`, tabelas `VALUES`, `OFFSET` antes de `LIMIT`, `BETWEEN SYMMETRIC` e várias centenas de
funções, incluindo aquelas cujos nomes existem em ambos os sistemas com semânticas diferentes (por exemplo, a função `length`
do Trino conta code points Unicode e é traduzida para `lengthUTF8`). As funções do ClickHouse que não colidem com nomes
do Trino continuam acessíveis, de modo que as duas famílias de funções podem ser combinadas em uma mesma consulta.

Os valores `JSON` do Trino são mapeados para o tipo [`JSON`](/pt-BR/reference/data-types/newjson) do ClickHouse:
literais `JSON '...'` e `json_parse` viram casts para `JSON`, `json_format` vira `toJSONString`, e as funções
de caminho (`json_extract`, `json_extract_scalar`, `json_value`, `json_query`, `json_exists`, `json_size`) são
traduzidas para suas contrapartes no ClickHouse. Como o tipo `JSON` do ClickHouse armazena objetos, documentos que não são objetos
(arrays e escalares de nível superior) são rejeitados ao serem materializados como valores `JSON`; já as funções de caminho aceitam
qualquer texto JSON.

Algumas semânticas do Trino não podem ser expressas no texto da consulta traduzida; em vez disso, são aplicadas ao contexto
da consulta: outer joins produzem `NULL` (`join_use_nulls`), set operations usam o supertipo numérico em vez de
`Variant` (`use_variant_as_common_type`), e o query analyzer é obrigatório (`enable_analyzer`). Uma cláusula
`SETTINGS` explícita na consulta continua tendo precedência sobre esses valores.

As semânticas que não podem ser corrigidas por uma tradução no nível da consulta permanecem as do ClickHouse. Em especial,
o operador de divisão `/` realiza divisão inteira no Trino, mas divisão de ponto flutuante no ClickHouse, e
`round` usa banker's rounding no ClickHouse para argumentos `Float`.

Use `EXPLAIN SYNTAX` para ver como uma consulta é traduzida.
