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

# Lenguajes de consulta alternativos

> Utiliza lenguajes de consulta alternativos en 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>
            Funcionalidad experimental
        </a>;
};

Además de SQL estándar, ClickHouse admite varios lenguajes de consulta alternativos para la consulta de datos.

Los dialectos admitidos actualmente son:

* `clickhouse`: El [dialecto SQL](/es/chdb/reference/sql-reference) predeterminado de ClickHouse
* `prql`: [Lenguaje de consulta relacional en canalización (PRQL)](https://prql-lang.org/)
* `kusto`: [Lenguaje 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)

El lenguaje de consulta utilizado se controla mediante la configuración `dialect`.

<h2 id="standard-sql">
  SQL estándar
</h2>

SQL estándar es el lenguaje de consulta predeterminado de ClickHouse.

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

<h2 id="pipelined-relational-query-language-prql">
  Lenguaje de consulta relacional en canalización (PRQL)
</h2>

<ExperimentalBadge />

Para habilitar PRQL:

```sql theme={null}
SET allow_experimental_prql_dialect = 1; -- esta sentencia SET solo es necesaria para versiones de ClickHouse >= v25.1
SET dialect = 'prql'
```

Ejemplo de consulta PRQL:

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

Entre bastidores, ClickHouse utiliza la transpilación de PRQL a SQL para ejecutar consultas PRQL.

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

<ExperimentalBadge />

Para habilitar KQL:

```sql theme={null}
SET allow_experimental_kusto_dialect = 1; -- esta sentencia SET solo es necesaria para versiones de 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 │
└────────┘
```

Ten en cuenta que es posible que las consultas KQL no tengan acceso a todas las funciones definidas en ClickHouse.

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

<ExperimentalBadge />

Para habilitar el dialecto de Trino:

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

La sintaxis específica de Trino se traduce a ClickHouse SQL, y los nombres de las funciones de Trino se asignan a sus equivalentes en 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 │
└─────────┘
```

La traducción cubre, entre otras cosas, los literales `ARRAY[...]`, `TRY_CAST`, `UNNEST` (traducido a `ARRAY JOIN`),
los constructores y tipos `ROW`, las tablas `VALUES`, `OFFSET` antes de `LIMIT`, `BETWEEN SYMMETRIC` y varios cientos de
funciones, incluidas aquellas cuyos nombres existen en ambos sistemas con semánticas distintas (por ejemplo, `length` de Trino
cuenta puntos de código Unicode y se traduce a `lengthUTF8`). Las funciones de ClickHouse que no entran en conflicto con los nombres
de Trino siguen estando disponibles, de modo que ambas familias de funciones pueden combinarse en una misma consulta.

Los valores `JSON` de Trino se asignan al tipo [`JSON`](/es/reference/data-types/newjson) de ClickHouse:
los literales `JSON '...'` y `json_parse` se convierten en conversiones a `JSON`, `json_format` pasa a ser `toJSONString` y las
funciones de ruta (`json_extract`, `json_extract_scalar`, `json_value`, `json_query`, `json_exists`, `json_size`) se
traducen a sus equivalentes de ClickHouse. Dado que el tipo `JSON` de ClickHouse almacena objetos, los documentos que no son objetos
(arrays y escalares de nivel superior) se rechazan al materializarse como valores `JSON`; las funciones de ruta aceptan
cualquier texto JSON.

Algunas semánticas de Trino no se pueden expresar en el texto de la consulta traducida, por lo que se aplican al contexto
de la consulta: los outer joins producen `NULL` (`join_use_nulls`), las operaciones de conjuntos usan el supertipo numérico en lugar de
`Variant` (`use_variant_as_common_type`) y se requiere el analizador de consultas (`enable_analyzer`). Una cláusula
`SETTINGS` explícita en la consulta sigue teniendo precedencia sobre estas.

Las semánticas que no pueden corregirse mediante una traducción a nivel de consulta siguen siendo las de ClickHouse. En particular,
el operador de división `/` realiza una división entera en Trino, pero una división de coma flotante en ClickHouse, y
`round` aplica el redondeo bancario en ClickHouse para argumentos `Float`.

Utilice `EXPLAIN SYNTAX` para ver cómo se traduce una consulta.
