join_algorithm
- grace_hash
grace_hash_join_initial_buckets). Esto se hace de forma que cada bucket pueda procesarse de manera independiente. Las filas del primer bucket se añaden a una hash table en memoria, mientras que las demás se guardan en disco. Si la hash table supera el memory limit (por ejemplo, el configurado en max_bytes_in_join), se incrementa el número de buckets y se reasigna el bucket correspondiente a cada fila. Las filas que no pertenezcan al bucket actual se descargan y se reasignan.
Admite INNER/LEFT/RIGHT/FULL ALL/ANY JOIN.
- hash
OR en la sección JOIN ON.
Cuando se usa el algoritmo hash, la parte derecha de JOIN se carga en RAM.
- parallel_hash
hash join que divide los datos en buckets y construye varias hash tables de forma simultánea, en lugar de una sola, para acelerar este proceso.
Cuando se usa el algoritmo parallel_hash, la parte derecha de JOIN se carga en RAM.
- partial_merge
RIGHT JOIN y FULL JOIN solo se admiten con estrictez ALL (SEMI, ANTI, ANY y ASOF no son compatibles).
Cuando se usa el algoritmo partial_merge, ClickHouse ordena los datos y los vuelca a disco. El algoritmo partial_merge en ClickHouse difiere ligeramente de la implementación clásica. Primero, ClickHouse ordena la tabla derecha por join keys en bloques y crea un índice min-max para los bloques ordenados. Después, ordena partes de la tabla izquierda por la join key y las combina con la tabla derecha. El índice min-max también se utiliza para omitir bloques innecesarios de la tabla derecha.
- direct
direct (también conocido como nested loop) realiza una lookup en la tabla derecha usando como claves las filas de la tabla izquierda.
Es compatible con almacenamientos especiales como Dictionary, EmbeddedRocksDB y tablas MergeTree.
Para las tablas MergeTree, el algoritmo envía los filtros de join key directamente a la storage layer. Esto puede ser más eficiente cuando la clave puede usar el primary key index de la tabla para lookups; de lo contrario, realiza escaneos completos de la tabla derecha para cada block de la tabla izquierda.
Admite joins INNER y LEFT, y solo join keys de igualdad de una sola columna sin otras condiciones.
- auto
auto, primero se prueba hash join y el algoritmo cambia dinámicamente a otro algoritmo si se supera el memory limit.
- full_sorting_merge
- prefer_partial_merge
partial_merge join si es posible; en caso contrario, usa hash. Obsoleto, igual que partial_merge,hash.
- default (obsoleto)
direct,hash; es decir, intenta usar direct join y hash join (en este orden).
join_any_take_last_row
ANY cuando la tabla derecha tiene más de una fila coincidente para una clave.
Esta configuración se aplica a las tablas con motor
Join y a los algoritmos de join basados en hash.Si un join se construye en paralelo, el orden de las filas puede no ser determinista. Esto significa que join_any_take_last_row = 1 puede devolver una fila no determinista en las consultas ANY JOIN.- 0 — Si la tabla derecha tiene más de una fila coincidente, solo se une la primera fila encontrada.
- 1 — Si la tabla derecha tiene más de una fila coincidente, solo se une la última fila encontrada.
join_default_strictness
ALL— Si la tabla de la derecha tiene varias filas coincidentes, ClickHouse crea un producto cartesiano a partir de las filas coincidentes. Este es el comportamiento normal deJOINen standard SQL.ANY— Si la tabla de la derecha tiene varias filas coincidentes, solo se combina la primera que se encuentra. Si la tabla de la derecha tiene solo una fila coincidente, los resultados deANYyALLson los mismos.ASOF— Para combinar secuencias con una coincidencia incierta.Cadena vacía— Si no se especificaALLoANYen la consulta, ClickHouse lanza una excepción.
join_on_disk_max_files_to_merge
- Cualquier entero positivo a partir de 2.
join_output_by_rowlist_perkey_rows_threshold
join_overflow_mode
hash y parallel_hash de
join_algorithm. Otros
algoritmos (por ejemplo, partial_merge, grace_hash, auto) gestionan los
límites de forma diferente: mediante volcado a disco, reparticionamiento o cambio de
estrategia; consulte
join_algorithm.
Valores posibles:
THROW— ClickHouse lanza una excepción y detiene la consulta.BREAK— ClickHouse detiene la consulta y no lanza ninguna excepción.
THROW.
Véase también