arrayJoin pega cada linha e gera um conjunto de linhas (unfold).
Essa função recebe um array como argumento e replica a linha de origem em várias linhas, de acordo com o número de elementos no array.
Todos os valores das colunas são simplesmente copiados, exceto os valores da coluna à qual essa função é aplicada; eles são substituídos pelo valor correspondente do array.
Se o array estiver vazio,
arrayJoin não produz nenhuma linha.
Para retornar uma única linha contendo o valor padrão do tipo do array, você pode envolvê-lo com emptyArrayToSingle, por exemplo: arrayJoin(emptyArrayToSingle(...)).Query
Response
arrayJoin afeta todas as seções da consulta, incluindo a seção WHERE. Observe que, no exemplo abaixo, o resultado da consulta é 2, embora a subconsulta tenha retornado 1 linha.
Query
Response
arrayJoin. Nesse caso, a transformação é realizada várias vezes, e o número de linhas é multiplicado.
Por exemplo:
Query
Response
Boa prática
arrayJoin com a mesma expressão pode não produzir os resultados esperados devido à eliminação de subexpressões comuns.
Nesses casos, considere modificar expressões de array repetidas com operações adicionais que não afetam o resultado do JOIN. Por exemplo, arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, []))
Exemplo:
Query
ARRAY JOIN na consulta SELECT, que oferece possibilidades mais amplas.
ARRAY JOIN permite converter várias Array com o mesmo número de elementos de uma só vez.
Exemplo:
Query
Response
Tuple
Exemplo:
Query
Row
arrayJoin no ClickHouse vem de sua semelhança conceitual com a operação JOIN, mas aplicada a arrays dentro de uma única linha. Enquanto as junções tradicionais combinam linhas de tabelas diferentes, arrayJoin “junta” cada elemento de um array em uma linha, produzindo várias linhas — uma para cada elemento do array — enquanto duplica os valores das outras colunas. O ClickHouse também fornece a sintaxe da cláusula ARRAY JOIN, o que torna essa relação com as operações JOIN tradicionais ainda mais explícita ao usar a terminologia familiar do SQL JOIN. Esse processo também é chamado de “desdobramento” do array, mas o termo “join” é usado tanto no nome da função quanto na cláusula porque ele se assemelha a unir a tabela aos elementos do array, expandindo efetivamente o conjunto de dados de forma semelhante a uma operação JOIN.