ClickHouse/docs/es/engines/table-engines/special/join.md
2020-10-13 20:23:29 +03:00

5.0 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 40 Unir

Unir

Estructura de datos preparada para usar en JOIN operación.

Creación de una tabla

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])

Vea la descripción detallada del CREATE TABLE consulta.

Parámetros del motor

Entrar join_strictness y join_type parámetros sin comillas, por ejemplo, Join(ANY, LEFT, col1). Deben coincidir con el JOIN operación para la que se utilizará la tabla. Si los parámetros no coinciden, ClickHouse no lanza una excepción y puede devolver datos incorrectos.

Uso de la tabla

Ejemplo

Creación de la tabla del lado izquierdo:

CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog
INSERT INTO id_val VALUES (1,11)(2,12)(3,13)

Creando el lado derecho Join tabla:

CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id)
INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23)

Unirse a las tablas:

SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id) SETTINGS join_use_nulls = 1
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │            ᴺᵁᴸᴸ │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘

Como alternativa, puede recuperar datos del Join tabla, especificando el valor de la clave de unión:

SELECT joinGet('id_val_join', 'val', toUInt32(1))
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘

Selección e inserción de datos

Usted puede utilizar INSERT consultas para agregar datos al Join-mesas de motor. Si la tabla se creó con el ANY estricta, se ignoran los datos de las claves duplicadas. Con el ALL estricta, se agregan todas las filas.

No se puede realizar una SELECT consulta directamente desde la tabla. En su lugar, use uno de los siguientes métodos:

  • Coloque la mesa hacia el lado derecho en un JOIN clausula.
  • Llame al joinGet función, que le permite extraer datos de la tabla de la misma manera que de un diccionario.

Limitaciones y ajustes

Al crear una tabla, se aplican los siguientes valores:

El Join-las tablas del motor no se pueden usar en GLOBAL JOIN operación.

El Join-motor permite el uso Sistema abierto. ajuste en el CREATE TABLE instrucción. Y SELECT consulta permite el uso join_use_nulls demasiado. Si tienes diferentes join_use_nulls configuración, puede obtener un error al unirse a la tabla. Depende del tipo de JOIN. Cuando se utiliza joinGet función, usted tiene que utilizar el mismo join_use_nulls ajuste en CRATE TABLE y SELECT instrucción.

Almacenamiento de datos

Join datos de la tabla siempre se encuentra en la memoria RAM. Al insertar filas en una tabla, ClickHouse escribe bloques de datos en el directorio del disco para que puedan restaurarse cuando se reinicie el servidor.

Si el servidor se reinicia incorrectamente, el bloque de datos en el disco puede perderse o dañarse. En este caso, es posible que deba eliminar manualmente el archivo con datos dañados.

Artículo Original