Pular para o conteúdo principal
Estrutura de dados preparada opcional para uso em operações de JOIN.
No ClickHouse Cloud, se o serviço tiver sido criado com uma versão anterior à 25.4, será necessário definir a compatibilidade para pelo menos 25.4 usando SET compatibility=25.4.

Criando uma tabela

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, ...])
Consulte a descrição detalhada da consulta CREATE TABLE.

Parâmetros do motor

join_strictness

join_strictnessstrictness do JOIN.

join_type

join_typetipo de JOIN.

Colunas-chave

k1[, k2, ...] – Colunas-chave da cláusula USING usadas na operação JOIN. Informe os parâmetros join_strictness e join_type sem aspas, por exemplo, Join(ANY, LEFT, col1). Eles devem corresponder à operação JOIN para a qual a tabela será usada. Se os parâmetros não corresponderem, o ClickHouse não lança exceção e pode retornar dados incorretos.

Detalhes e recomendações

Armazenamento de dados

Os dados da tabela Join ficam sempre na RAM. Ao inserir linhas em uma tabela, o ClickHouse grava blocos de dados no diretório em disco para que possam ser restaurados quando o servidor for reiniciado. Se o servidor for reiniciado de forma incorreta, o bloco de dados em disco pode ser perdido ou corrompido. Nesse caso, talvez seja necessário excluir manualmente o arquivo com os dados corrompidos.

Selecionando e inserindo dados

Você pode usar consultas INSERT para adicionar dados a tabelas do motor Join. Se a tabela foi criada com a strictness ANY, os dados com chaves duplicadas são ignorados. Com a strictness ALL, todas as linhas são adicionadas. Os principais casos de uso de tabelas do motor Join são os seguintes:
  • Colocar a tabela no lado direito de uma cláusula JOIN.
  • Chamar a função joinGet, que permite extrair dados da tabela da mesma forma que de um dicionário.

Excluindo dados

As consultas ALTER DELETE em tabelas com motor Join são implementadas como mutações. A mutação DELETE lê os dados filtrados e sobrescreve os dados em memória e no disco.

Limitações e configurações

Ao criar uma tabela, as seguintes configurações são aplicadas:

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

Desabilita a persistência dos motores de tabela Join e Set. Reduz a sobrecarga de E/S. Adequado para cenários que priorizam desempenho e não exigem persistência. Valores possíveis:
  • 1 — Habilitado.
  • 0 — Desabilitado.
Valor padrão: 1. As tabelas do motor Join não podem ser usadas em operações GLOBAL JOIN. O motor Join permite especificar a configuração join_use_nulls na instrução CREATE TABLE. A consulta SELECT deve ter o mesmo valor de join_use_nulls.

Exemplos de uso

Criando a tabela à esquerda:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11)(2,12)(3,13);
Criando a tabela Join da direita:
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);
Junção das tabelas:
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, você pode obter dados da tabela Join, especificando o valor da chave de junção:
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
Excluir uma linha da tabela Join:
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
Última modificação em 10 de junho de 2026