Estructura de datos preparada opcional para su uso en operaciones JOIN.
Crear una tabla
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS 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_strictness – modo de JOIN.
join_type
join_type – tipo 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
max_rows_in_join
max_bytes_in_join
join_overflow_mode
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 │
└────┴─────┘