Estrutura de dados preparada opcional para uso em operações de JOIN.
Criando uma tabela
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, ...])Consulte a descrição detalhada da consulta CREATE TABLE.
Parâmetros do motor
join_strictness
join_strictness – strictness do JOIN.
join_type
join_type – tipo 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
max_rows_in_join
max_bytes_in_join
join_overflow_mode
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 │
└────┴─────┘