Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] ON no CROSS JOIN

Na aula de JOIN o professor comenta que não se usa ON no CROSS JOIN e o próprio BQ não deixa rodar a query, mas na query da aula de "Exemplo do uso de junções" ele utiliza o ON no CROSS JOIN (Query abaixo) e funciona. Por que aqui a query rodou normalmente e na query da aula de JOIN o próprio Big Query não deixa rodar com o ON?

WITH index_produtos AS (
 SELECT id_produto, nome, categoria, preco,
 ARRAY (SELECT AS STRUCT mp, ROW_NUMBER() OVER() AS idx
 FROM UNNEST(materiasprimas) AS mp) AS materiaprima_index,
 ARRAY (SELECT AS STRUCT ds, ROW_NUMBER() OVER() AS idx
 FROM UNNEST(distribuicao) AS ds) AS distribuicao_index
 FROM curso-big-query-12339.belleza_verde_vendas.produtos)
SELECT ip.id_produto, ip.nome, ip.categoria, ip.preco, 
 mpUN.mp AS id_materia, dsUN.ds as distribuicao_materia
FROM index_produtos ip
CROSS JOIN UNNEST (ip.materiaprima_index) AS mpUN
CROSS JOIN UNNEST (ip.distribuicao_index) AS dsUN
ON mpUN.idx = dsUN.idx;
1 resposta
solução!

Ei, Isabelle! Tudo bem?

É verdade, o CROSS JOIN por padrão, não utiliza a cláusula ON puro, já que sua função é gerar um produto cartesiano, combinando todas as linhas de dois conjuntos. E incluir um ON diretamente com um CROSS JOIN pode resultar em erro de sintaxe, pois essa cláusula é reservada para junções como INNER JOIN, LEFT JOIN, RIGHT JOIN, entre outras.

Porém, no contexto do código da aula, o CROSS JOIN é utilizado com a função UNNEST. O UNNEST no BigQuery tem o papel de desaninhar arrays, transformando-os em linhas individuais. É comum combinar CROSS JOIN com UNNEST para expandir arrays em linhas, permitindo o acesso aos elementos individuais. Nesse caso, a cláusula ON pode ser usada para filtrar os resultados da expansão, oferecendo maior controle sobre os dados gerados.

Estes conteúdos podem abrir em inglês e se preferir ler em português, recomendo que utilize o tradutor automático do navegador.

Espero ter ajudado e qualquer dúvida, compartilhe no fórum.

Até mais, Isabelle!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!