mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-18 05:32:52 +00:00
181 lines
63 KiB
Markdown
181 lines
63 KiB
Markdown
---
|
||
machine_translated: true
|
||
machine_translated_rev: ad252bbb4f7e2899c448eb42ecc39ff195c8faa1
|
||
toc_priority: 40
|
||
toc_title: Compatibilidad con ANSI
|
||
---
|
||
|
||
# Compatibilidad de SQL ANSI de ClickHouse SQL Dialect {#ansi-sql-compatibility-of-clickhouse-sql-dialect}
|
||
|
||
!!! note "Nota"
|
||
Este artículo se basa en la Tabla 38, “Feature taxonomy and definition for mandatory features”, Annex F of ISO/IEC CD 9075-2:2013.
|
||
|
||
## Diferencias en el comportamiento {#differences-in-behaviour}
|
||
|
||
En la tabla siguiente se enumeran los casos en que la característica de consulta funciona en ClickHouse, pero no se comporta como se especifica en ANSI SQL.
|
||
|
||
| Feature ID | Nombre de la función | Diferencia |
|
||
|------------|----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
|
||
| E011 | Tipos de datos numéricos | El literal numérico con punto se interpreta como aproximado (`Float64`) en lugar de exacta (`Decimal`) |
|
||
| E051-05 | Los elementos seleccionados pueden ser renombrados | Los cambios de nombre de los elementos tienen un alcance de visibilidad más amplio que solo el resultado SELECT |
|
||
| E141-01 | Restricciones NOT NULL | `NOT NULL` está implícito para las columnas de tabla de forma predeterminada |
|
||
| E011-04 | Operadores aritméticos | ClickHouse se desborda en lugar de la aritmética comprobada y cambia el tipo de datos de resultado en función de las reglas personalizadas |
|
||
|
||
## Estado de la función {#feature-status}
|
||
|
||
| Feature ID | Nombre de la función | Estatus | Comentario |
|
||
|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||
| **E011** | **Tipos de datos numéricos** | **Parcial**{.text-warning} | |
|
||
| E011-01 | Tipos de datos INTEGER y SMALLINT | Sí{.text-success} | |
|
||
| E011-02 | REAL, DOUBLE PRECISION y FLOAT tipos de datos tipos de datos | Parcial{.text-warning} | `FLOAT(<binary_precision>)`, `REAL` y `DOUBLE PRECISION` no son compatibles |
|
||
| E011-03 | Tipos de datos DECIMAL y NUMERIC | Parcial{.text-warning} | Solo `DECIMAL(p,s)` es compatible, no `NUMERIC` |
|
||
| E011-04 | Operadores aritméticos | Sí{.text-success} | |
|
||
| E011-05 | Comparación numérica | Sí{.text-success} | |
|
||
| E011-06 | Conversión implícita entre los tipos de datos numéricos | No{.text-danger} | ANSI SQL permite la conversión implícita arbitraria entre tipos numéricos, mientras que ClickHouse se basa en funciones que tienen múltiples sobrecargas en lugar de conversión implícita |
|
||
| **E021** | **Tipos de cadena de caracteres** | **Parcial**{.text-warning} | |
|
||
| E021-01 | Tipo de datos CHARACTER | No{.text-danger} | |
|
||
| E021-02 | Tipo de datos CHARACTER VARYING | No{.text-danger} | `String` se comporta de manera similar, pero sin límite de longitud entre paréntesis |
|
||
| E021-03 | Literales de caracteres | Parcial{.text-warning} | Sin concatenación automática de literales consecutivos y compatibilidad con el conjunto de caracteres |
|
||
| E021-04 | Función CHARACTER_LENGTH | Parcial{.text-warning} | No `USING` clausula |
|
||
| E021-05 | Función OCTET_LENGTH | No{.text-danger} | `LENGTH` se comporta de manera similar |
|
||
| E021-06 | SUBSTRING | Parcial{.text-warning} | No hay soporte para `SIMILAR` y `ESCAPE` cláusulas, no `SUBSTRING_REGEX` variante |
|
||
| E021-07 | Concatenación de caracteres | Parcial{.text-warning} | No `COLLATE` clausula |
|
||
| E021-08 | Funciones SUPERIOR e INFERIOR | Sí{.text-success} | |
|
||
| E021-09 | Función TRIM | Sí{.text-success} | |
|
||
| E021-10 | Conversión implícita entre los tipos de cadena de caracteres de longitud fija y longitud variable | No{.text-danger} | ANSI SQL permite la conversión implícita arbitraria entre tipos de cadena, mientras que ClickHouse se basa en funciones que tienen múltiples sobrecargas en lugar de conversión implícita |
|
||
| E021-11 | Función POSITION | Parcial{.text-warning} | No hay soporte para `IN` y `USING` cláusulas, no `POSITION_REGEX` variante |
|
||
| E021-12 | Comparación de caracteres | Sí{.text-success} | |
|
||
| **E031** | **Identificador** | **Parcial**{.text-warning} | |
|
||
| E031-01 | Identificadores delimitados | Parcial{.text-warning} | El soporte literal Unicode es limitado |
|
||
| E031-02 | Identificadores de minúsculas | Sí{.text-success} | |
|
||
| E031-03 | Trailing subrayado | Sí{.text-success} | |
|
||
| **E051** | **Especificación básica de la consulta** | **Parcial**{.text-warning} | |
|
||
| E051-01 | SELECT DISTINCT | Sí{.text-success} | |
|
||
| E051-02 | Cláusula GROUP BY | Sí{.text-success} | |
|
||
| E051-04 | GROUP BY puede contener columnas que no estén en `<select list>` | Sí{.text-success} | |
|
||
| E051-05 | Los elementos seleccionados pueden ser renombrados | Sí{.text-success} | |
|
||
| E051-06 | Cláusula HAVING | Sí{.text-success} | |
|
||
| E051-07 | Calificado \* en la lista de selección | Sí{.text-success} | |
|
||
| E051-08 | Nombre de correlación en la cláusula FROM | Sí{.text-success} | |
|
||
| E051-09 | Cambiar el nombre de las columnas en la cláusula FROM | No{.text-danger} | |
|
||
| **E061** | **Predicados básicos y condiciones de búsqueda** | **Parcial**{.text-warning} | |
|
||
| E061-01 | Predicado de comparación | Sí{.text-success} | |
|
||
| E061-02 | ENTRE predicado | Parcial{.text-warning} | No `SYMMETRIC` y `ASYMMETRIC` clausula |
|
||
| E061-03 | Predicado IN con lista de valores | Sí{.text-success} | |
|
||
| E061-04 | COMO predicado | Sí{.text-success} | |
|
||
| E061-05 | Predicado LIKE: cláusula ESCAPE | No{.text-danger} | |
|
||
| E061-06 | Predicado NULL | Sí{.text-success} | |
|
||
| E061-07 | Predicado de comparación cuantificado | No{.text-danger} | |
|
||
| E061-08 | Predicado EXISTS | No{.text-danger} | |
|
||
| E061-09 | Subconsultas en predicado de comparación | Sí{.text-success} | |
|
||
| E061-11 | Subconsultas en el predicado IN | Sí{.text-success} | |
|
||
| E061-12 | Subconsultas en predicado de comparación cuantificado | No{.text-danger} | |
|
||
| E061-13 | Subconsultas correlacionadas | No{.text-danger} | |
|
||
| E061-14 | Condición de búsqueda | Sí{.text-success} | |
|
||
| **E071** | **Expresiones de consulta básicas** | **Parcial**{.text-warning} | |
|
||
| E071-01 | Operador de tabla UNION DISTINCT | No{.text-danger} | |
|
||
| E071-02 | Operador de tabla UNION ALL | Sí{.text-success} | |
|
||
| E071-03 | EXCEPTO operador de tabla DISTINCT | No{.text-danger} | |
|
||
| E071-05 | Las columnas combinadas a través de operadores de tabla no necesitan tener exactamente el mismo tipo de datos | Sí{.text-success} | |
|
||
| E071-06 | Operadores de tabla en subconsultas | Sí{.text-success} | |
|
||
| **E081** | **Privilegios básicos** | **Parcial**{.text-warning} | Trabajo en curso |
|
||
| **E091** | **Establecer funciones** | **Sí**{.text-success} | |
|
||
| E091-01 | AVG | Sí{.text-success} | |
|
||
| E091-02 | COUNT | Sí{.text-success} | |
|
||
| E091-03 | MAX | Sí{.text-success} | |
|
||
| E091-04 | MIN | Sí{.text-success} | |
|
||
| E091-05 | SUM | Sí{.text-success} | |
|
||
| E091-06 | Cuantificador ALL | No{.text-danger} | |
|
||
| E091-07 | Cuantificador DISTINCT | Parcial{.text-warning} | No se admiten todas las funciones agregadas |
|
||
| **E101** | **Manipulación de datos básicos** | **Parcial**{.text-warning} | |
|
||
| E101-01 | Instrucción INSERT | Sí{.text-success} | Nota: la clave principal en ClickHouse no implica el `UNIQUE` limitación |
|
||
| E101-03 | Instrucción UPDATE buscada | No{.text-danger} | Hay una `ALTER UPDATE` declaración para la modificación de datos por lotes |
|
||
| E101-04 | Instrucción DELETE buscada | No{.text-danger} | Hay una `ALTER DELETE` declaración para la eliminación de datos por lotes |
|
||
| **E111** | **Instrucción SELECT de una sola fila** | **No**{.text-danger} | |
|
||
| **E121** | **Soporte básico del cursor** | **No**{.text-danger} | |
|
||
| E121-01 | DECLARE CURSOR | No{.text-danger} | |
|
||
| E121-02 | Las columnas PEDIR POR no necesitan estar en la lista de selección | No{.text-danger} | |
|
||
| E121-03 | Expresiones de valor en la cláusula ORDER BY | No{.text-danger} | |
|
||
| E121-04 | Declaración ABIERTA | No{.text-danger} | |
|
||
| E121-06 | Instrucción UPDATE posicionada | No{.text-danger} | |
|
||
| E121-07 | Instrucción DELETE posicionada | No{.text-danger} | |
|
||
| E121-08 | Declaración CERRAR | No{.text-danger} | |
|
||
| E121-10 | Declaración FETCH: implícita NEXT | No{.text-danger} | |
|
||
| E121-17 | CON Cursores HOLD | No{.text-danger} | |
|
||
| **E131** | **Soporte de valor nulo (nulos en lugar de valores)** | **Parcial**{.text-warning} | Se aplican algunas restricciones |
|
||
| **E141** | **Restricciones de integridad básicas** | **Parcial**{.text-warning} | |
|
||
| E141-01 | Restricciones NOT NULL | Sí{.text-success} | Nota: `NOT NULL` está implícito para las columnas de tabla de forma predeterminada |
|
||
| E141-02 | Restricción UNIQUE de columnas NOT NULL | No{.text-danger} | |
|
||
| E141-03 | Restricciones PRIMARY KEY | No{.text-danger} | |
|
||
| E141-04 | Restricción básica FOREIGN KEY con el valor predeterminado NO ACTION para la acción de eliminación referencial y la acción de actualización referencial | No{.text-danger} | |
|
||
| E141-06 | Restricción CHECK | Sí{.text-success} | |
|
||
| E141-07 | Valores predeterminados de columna | Sí{.text-success} | |
|
||
| E141-08 | NO NULL inferido en CLAVE PRIMARIA | Sí{.text-success} | |
|
||
| E141-10 | Los nombres de una clave externa se pueden especificar en cualquier orden | No{.text-danger} | |
|
||
| **E151** | **Soporte de transacciones** | **No**{.text-danger} | |
|
||
| E151-01 | Declaración COMMIT | No{.text-danger} | |
|
||
| E151-02 | Instrucción ROLLBACK | No{.text-danger} | |
|
||
| **E152** | **Instrucción SET TRANSACTION básica** | **No**{.text-danger} | |
|
||
| E152-01 | Instrucción SET TRANSACTION: cláusula ISOLATION LEVEL SERIALIZABLE | No{.text-danger} | |
|
||
| E152-02 | Instrucción SET TRANSACTION: cláusulas READ ONLY y READ WRITE | No{.text-danger} | |
|
||
| **E153** | **Consultas actualizables con subconsultas** | **No**{.text-danger} | |
|
||
| **E161** | **Comentarios SQL usando doble menos inicial** | **Sí**{.text-success} | |
|
||
| **E171** | **Soporte SQLSTATE** | **No**{.text-danger} | |
|
||
| **E182** | **Enlace de idioma de host** | **No**{.text-danger} | |
|
||
| **F031** | **Manipulación básica del esquema** | **Parcial**{.text-warning} | |
|
||
| F031-01 | Instrucción CREATE TABLE para crear tablas base persistentes | Parcial{.text-warning} | No `SYSTEM VERSIONING`, `ON COMMIT`, `GLOBAL`, `LOCAL`, `PRESERVE`, `DELETE`, `REF IS`, `WITH OPTIONS`, `UNDER`, `LIKE`, `PERIOD FOR` cláusulas y sin soporte para tipos de datos resueltos por el usuario |
|
||
| F031-02 | Instrucción CREATE VIEW | Parcial{.text-warning} | No `RECURSIVE`, `CHECK`, `UNDER`, `WITH OPTIONS` cláusulas y sin soporte para tipos de datos resueltos por el usuario |
|
||
| F031-03 | Declaración GRANT | Sí{.text-success} | |
|
||
| F031-04 | Sentencia ALTER TABLE: cláusula ADD COLUMN | Parcial{.text-warning} | No hay soporte para `GENERATED` cláusula y período de tiempo del sistema |
|
||
| F031-13 | Instrucción DROP TABLE: cláusula RESTRICT | No{.text-danger} | |
|
||
| F031-16 | Instrucción DROP VIEW: cláusula RESTRICT | No{.text-danger} | |
|
||
| F031-19 | Declaración REVOKE: cláusula RESTRICT | No{.text-danger} | |
|
||
| **F041** | **Tabla unida básica** | **Parcial**{.text-warning} | |
|
||
| F041-01 | Unión interna (pero no necesariamente la palabra clave INNER) | Sí{.text-success} | |
|
||
| F041-02 | Palabra clave INTERNA | Sí{.text-success} | |
|
||
| F041-03 | LEFT OUTER JOIN | Sí{.text-success} | |
|
||
| F041-04 | RIGHT OUTER JOIN | Sí{.text-success} | |
|
||
| F041-05 | Las uniones externas se pueden anidar | Sí{.text-success} | |
|
||
| F041-07 | La tabla interna en una combinación externa izquierda o derecha también se puede usar en una combinación interna | Sí{.text-success} | |
|
||
| F041-08 | Todos los operadores de comparación son compatibles (en lugar de solo =) | No{.text-danger} | |
|
||
| **F051** | **Fecha y hora básicas** | **Parcial**{.text-warning} | |
|
||
| F051-01 | Tipo de datos DATE (incluido el soporte del literal DATE) | Parcial{.text-warning} | No literal |
|
||
| F051-02 | Tipo de datos TIME (incluido el soporte del literal TIME) con una precisión de segundos fraccionarios de al menos 0 | No{.text-danger} | |
|
||
| F051-03 | Tipo de datos TIMESTAMP (incluido el soporte del literal TIMESTAMP) con una precisión de segundos fraccionarios de al menos 0 y 6 | No{.text-danger} | `DateTime64` tiempo proporciona una funcionalidad similar |
|
||
| F051-04 | Predicado de comparación en los tipos de datos DATE, TIME y TIMESTAMP | Parcial{.text-warning} | Sólo un tipo de datos disponible |
|
||
| F051-05 | CAST explícito entre tipos de fecha y hora y tipos de cadena de caracteres | Sí{.text-success} | |
|
||
| F051-06 | CURRENT_DATE | No{.text-danger} | `today()` es similar |
|
||
| F051-07 | LOCALTIME | No{.text-danger} | `now()` es similar |
|
||
| F051-08 | LOCALTIMESTAMP | No{.text-danger} | |
|
||
| **F081** | **UNIÓN y EXCEPTO en vistas** | **Parcial**{.text-warning} | |
|
||
| **F131** | **Operaciones agrupadas** | **Parcial**{.text-warning} | |
|
||
| F131-01 | Cláusulas WHERE, GROUP BY y HAVING admitidas en consultas con vistas agrupadas | Sí{.text-success} | |
|
||
| F131-02 | Múltiples tablas admitidas en consultas con vistas agrupadas | Sí{.text-success} | |
|
||
| F131-03 | Establecer funciones admitidas en consultas con vistas agrupadas | Sí{.text-success} | |
|
||
| F131-04 | Subconsultas con cláusulas GROUP BY y HAVING y vistas agrupadas | Sí{.text-success} | |
|
||
| F131-05 | SELECCIONAR una sola fila con cláusulas GROUP BY y HAVING y vistas agrupadas | No{.text-danger} | |
|
||
| **F181** | **Múltiples módulos de apoyo** | **No**{.text-danger} | |
|
||
| **F201** | **Función de fundición** | **Sí**{.text-success} | |
|
||
| **F221** | **Valores predeterminados explícitos** | **No**{.text-danger} | |
|
||
| **F261** | **Expresión CASE** | **Sí**{.text-success} | |
|
||
| F261-01 | Caso simple | Sí{.text-success} | |
|
||
| F261-02 | CASO buscado | Sí{.text-success} | |
|
||
| F261-03 | NULLIF | Sí{.text-success} | |
|
||
| F261-04 | COALESCE | Sí{.text-success} | |
|
||
| **F311** | **Instrucción de definición de esquema** | **Parcial**{.text-warning} | |
|
||
| F311-01 | CREATE SCHEMA | No{.text-danger} | |
|
||
| F311-02 | CREATE TABLE para tablas base persistentes | Sí{.text-success} | |
|
||
| F311-03 | CREATE VIEW | Sí{.text-success} | |
|
||
| F311-04 | CREATE VIEW: WITH CHECK OPTION | No{.text-danger} | |
|
||
| F311-05 | Declaración GRANT | Sí{.text-success} | |
|
||
| **F471** | **Valores escalares de la subconsulta** | **Sí**{.text-success} | |
|
||
| **F481** | **Predicado NULL expandido** | **Sí**{.text-success} | |
|
||
| **F812** | **Marcado básico** | **No**{.text-danger} | |
|
||
| **T321** | **Rutinas básicas invocadas por SQL** | **No**{.text-danger} | |
|
||
| T321-01 | Funciones definidas por el usuario sin sobrecarga | No{.text-danger} | |
|
||
| T321-02 | Procedimientos almacenados definidos por el usuario sin sobrecarga | No{.text-danger} | |
|
||
| T321-03 | Invocación de función | No{.text-danger} | |
|
||
| T321-04 | Declaración de LLAMADA | No{.text-danger} | |
|
||
| T321-05 | Declaración DEVOLUCIÓN | No{.text-danger} | |
|
||
| **T631** | **Predicado IN con un elemento de lista** | **Sí**{.text-success} | |
|