Saltar al contenido principal
Estructura de datos preparada opcional para su uso en operaciones JOIN.
En ClickHouse Cloud, si su servicio se creó con una versión anterior a la 25.4, deberá establecer la compatibilidad en al menos 25.4 mediante SET compatibility=25.4.

Crear 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, ...])
Consulta la descripción detallada de la sentencia CREATE TABLE.

Parámetros del motor

join_strictness

join_strictnessmodo de JOIN.

join_type

join_typetipo de JOIN.

Columnas clave

k1[, k2, ...] – columnas clave de la cláusula USING con las que se realiza la operación JOIN. Introduzca los parámetros join_strictness y join_type sin comillas; por ejemplo, Join(ANY, LEFT, col1). Deben coincidir con la operación JOIN para la que se va a utilizar la tabla. Si los parámetros no coinciden, ClickHouse no lanza ninguna excepción y puede devolver datos incorrectos.

Particularidades y recomendaciones

Almacenamiento de datos

Los datos de la tabla Join siempre se almacenan en la RAM. Al insertar filas en una tabla, ClickHouse escribe bloques de datos en el directorio del disco para poder restaurarlos cuando el servidor se reinicie. Si el servidor se reinicia de forma incorrecta, el bloque de datos en el disco podría perderse o dañarse. En este caso, puede ser necesario eliminar manualmente el archivo que contiene los datos dañados.

Selección e inserción de datos

Puede usar consultas INSERT para agregar datos a tablas con motor Join. Si la tabla se creó con modo ANY, los datos correspondientes a claves duplicadas se ignoran. Con modo ALL, se agregan todas las filas. Los principales casos de uso de las tablas con motor Join son los siguientes:
  • Coloque la tabla en el lado derecho de una cláusula JOIN.
  • Llame a la función joinGet, que permite extraer datos de la tabla del mismo modo que de un diccionario.

Eliminación de datos

Las consultas ALTER DELETE para tablas con motor Join se implementan como mutaciones. La mutación DELETE lee los datos filtrados y sobrescribe los datos en memoria y en disco.

Limitaciones y ajustes

Al crear una tabla, se aplican los siguientes ajustes:

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

Persistente

Deshabilita la persistencia en los motores de tabla Join y Set. Reduce la sobrecarga de IO. Es adecuado para escenarios en los que se prioriza el rendimiento y no se requiere persistencia. Valores posibles:
  • 1 — Habilitado.
  • 0 — Deshabilitado.
Valor predeterminado: 1. Las tablas del motor Join no pueden usarse en operaciones GLOBAL JOIN. El motor Join permite especificar la configuración join_use_nulls en la sentencia CREATE TABLE. La consulta SELECT debe tener el mismo valor de join_use_nulls.

Ejemplos de uso

Creación de la tabla de la izquierda:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11)(2,12)(3,13);
Creación de la tabla Join del lado derecho:
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);
Uniendo las tablas:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
Como alternativa, puede recuperar datos de la tabla Join especificando el valor de la clave de join:
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
Eliminar una fila de la tabla Join:
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
Última modificación el 10 de junio de 2026