join_algorithm
- grace_hash
grace_hash_join_initial_buckets). Isso é feito de forma a garantir que cada bucket possa ser processado de maneira independente. As linhas do primeiro bucket são adicionadas a uma tabela hash em memória, enquanto as demais são salvas em disco. Se a tabela hash crescer além do limite de memória (por exemplo, conforme definido por max_bytes_in_join), o número de buckets será aumentado, assim como o bucket atribuído a cada linha. Todas as linhas que não pertencem ao bucket atual são descarregadas e reatribuídas.
Oferece suporte a INNER/LEFT/RIGHT/FULL ALL/ANY JOIN.
- hash
OR na seção JOIN ON.
Ao usar o algoritmo hash, a parte direita de JOIN é carregada na RAM.
- parallel_hash
hash join que divide os dados em buckets e constrói simultaneamente várias tabelas hash em vez de apenas uma, para acelerar esse processo.
Ao usar o algoritmo parallel_hash, a parte direita de JOIN é carregada na RAM.
- partial_merge
RIGHT JOIN e FULL JOIN têm suporte apenas com strictness ALL (SEMI, ANTI, ANY e ASOF não têm suporte).
Ao usar o algoritmo partial_merge, o ClickHouse ordena os dados e os grava em disco. O algoritmo partial_merge no ClickHouse difere ligeiramente da implementação clássica. Primeiro, o ClickHouse ordena a tabela da direita pelas chaves de junção em blocos e cria um índice min-max para os blocos ordenados. Em seguida, ordena partes da tabela da esquerda pela join key e faz a junção com a tabela da direita. O índice min-max também é usado para ignorar blocos desnecessários da tabela da direita.
- direct
direct (também conhecido como nested loop) realiza um lookup na tabela da direita usando as linhas da tabela da esquerda como chaves.
É compatível com armazenamentos especiais, como tabelas Dicionário, EmbeddedRocksDB e MergeTree.
Para tabelas MergeTree, o algoritmo envia filtros de chave de junção diretamente para a camada de armazenamento. Isso pode ser mais eficiente quando a chave pode usar o índice de chave primária da tabela para lookups; caso contrário, ele executa varreduras completas na tabela da direita para cada bloco da tabela da esquerda.
Oferece suporte a junções INNER e LEFT e apenas a chaves de junção de igualdade de uma única coluna, sem outras condições.
- auto
auto, hash join é tentado primeiro, e o algoritmo é alterado dinamicamente para outro algoritmo se o limite de memória for excedido.
- full_sorting_merge
- prefer_partial_merge
partial_merge join, se possível; caso contrário, usa hash. Descontinuado; é o mesmo que partial_merge,hash.
- default (descontinuado)
direct,hash, ou seja, tente usar direct join e hash join (nessa ordem).
join_any_take_last_row
ANY quando a tabela da direita tem mais de uma linha correspondente para uma chave.
Essa configuração se aplica a tabelas com o motor
Join e a algoritmos de join baseados em hash.Se um join for executado em paralelo, a ordem das linhas pode ser não determinística. Isso significa que join_any_take_last_row = 1 pode retornar uma linha não determinística em consultas ANY JOIN.- 0 — Se a tabela da direita tiver mais de uma linha correspondente, apenas a primeira encontrada será combinada.
- 1 — Se a tabela da direita tiver mais de uma linha correspondente, apenas a última encontrada será combinada.
join_default_strictness
ALL— Se a tabela da direita tiver várias linhas correspondentes, o ClickHouse cria um produto cartesiano com as linhas correspondentes. Esse é o comportamento normal deJOINno SQL padrão.ANY— Se a tabela da direita tiver várias linhas correspondentes, somente a primeira encontrada é combinada. Se a tabela da direita tiver apenas uma linha correspondente, os resultados deANYeALLserão os mesmos.ASOF— Para junção de sequências com correspondência incerta.Empty string— SeALLouANYnão for especificado na consulta, o ClickHouse lança uma exceção.
join_on_disk_max_files_to_merge
- Qualquer número inteiro positivo, a partir de 2.
join_output_by_rowlist_perkey_rows_threshold
join_overflow_mode
hash e parallel_hash
de join_algorithm. Outros
algoritmos (por exemplo, partial_merge, grace_hash, auto) lidam com esses
limites de outra forma — fazendo spill para disco, reparticionando ou mudando
de estratégia — veja
join_algorithm.
Valores possíveis:
THROW— o ClickHouse lança uma exceção e interrompe a consulta.BREAK— o ClickHouse interrompe a consulta e não lança uma exceção.
THROW.
Veja também