1
resposta

Exercício 09 de Junções

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 belleza_verde_vendas.produtos)

SELECT ip.id_produto, ip.nome, ip.categoria, ip.preco,
mpUN.mp AS id_materia, mpdet.nome AS nome_materia_prima,
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
JOIN belleza_verde_vendas.materiasprimas AS mpdet
ON CAST (mpUN.mp AS INT64) = mpdet.id_materia
WHERE mpUN.idx = dsUN.idx;
1 resposta

Oi, Diego! Como vai?

Agradeço por compartilhar sua consulta com a comunidade Alura.

Seu exercício está muito bem construído! Você utilizou CTE (WITH), UNNEST com índices e junção condicional de forma eficiente — ótima prática para manipular arrays estruturados no BigQuery. A cláusula WHERE mpUN.idx = dsUN.idx foi essencial para alinhar corretamente os dados das matérias-primas com os canais de distribuição.

Continue praticando — esse tipo de consulta é muito útil em bases mais complexas com dados aninhados!

Dica: ao trabalhar com arrays em BigQuery, sempre que precisar combinar posições equivalentes entre arrays diferentes, o uso de ROW_NUMBER() com UNNEST é uma estratégia poderosa.

Ícone de sugestão Para saber mais:

No BigQuery, é comum precisar "desempacotar" arrays usando UNNEST, especialmente quando lidamos com campos aninhados. Quando dois arrays precisam ser combinados posição a posição, o uso de índices auxiliares com ROW_NUMBER() é uma solução prática e eficiente.

Quer entender melhor o uso de arrays no BigQuery? Confira este artigo: Trabalhar com matrizes

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!