diff --git a/models/br_mercadolivre_ofertas/item.sql b/models/br_mercadolivre_ofertas/item.sql index b1215aa0..72a89c3c 100644 --- a/models/br_mercadolivre_ofertas/item.sql +++ b/models/br_mercadolivre_ofertas/item.sql @@ -22,12 +22,23 @@ TIME( ELSE vendedor END vendedor, titulo, + categorias, CASE WHEN categorias = '[]' THEN null + WHEN TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(1)], '"') = '...' THEN + TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(2)], '"') + WHEN TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(0)], '"') = '...' THEN + TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(1)], '"') ELSE TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(0)], '"') END as categoria_principal, CASE - WHEN categorias = '[]' THEN null + when categorias = '[]' then null + WHEN TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(1)], '"') = '...' THEN + ARRAY_TO_STRING(ARRAY(SELECT x FROM UNNEST(JSON_EXTRACT_ARRAY(categorias)) AS x WITH OFFSET + WHERE OFFSET > 3), ', ') + WHEN TRIM(JSON_EXTRACT_ARRAY(categorias)[OFFSET(0)], '"') = '...' THEN + ARRAY_TO_STRING(ARRAY(SELECT x FROM UNNEST(JSON_EXTRACT_ARRAY(categorias)) AS x WITH OFFSET + WHERE OFFSET > 1), ', ') ELSE ARRAY_TO_STRING(ARRAY(SELECT x FROM UNNEST(JSON_EXTRACT_ARRAY(categorias)) AS x WITH OFFSET WHERE OFFSET > 0), ', ') END as outras_categorias, @@ -50,7 +61,10 @@ TIME( ELSE preco END AS FLOAT64) AS preco_final, FROM - `basedosdados-staging.br_mercadolivre_ofertas_staging.item`) + `basedosdados-staging.br_mercadolivre_ofertas_staging.item` + +) + SELECT data_consulta, hora_consulta, @@ -59,7 +73,7 @@ SELECT titulo, id_vendor as id_vendedor, vendedor, - categoria_principal, + a.categoria_principal, REGEXP_REPLACE( TRIM(outras_categorias, '"'), r'("([^"]+)")', diff --git a/models/br_mercadolivre_ofertas/schema.yml b/models/br_mercadolivre_ofertas/schema.yml index 27db9479..aab77f03 100644 --- a/models/br_mercadolivre_ofertas/schema.yml +++ b/models/br_mercadolivre_ofertas/schema.yml @@ -21,7 +21,7 @@ models: - name: categoria_principal description: Primeira categoria do item classificada no site - name: outras_categorias - description: Todas as categorias descritas no site em relação ao item + description: Demais categorias descritas no site em relação ao item - name: caracteristicas description: Características adicionais do item - name: envio_nacional diff --git a/models/br_mercadolivre_ofertas/vendedor.sql b/models/br_mercadolivre_ofertas/vendedor.sql index f3a96c43..a4ccf5a7 100644 --- a/models/br_mercadolivre_ofertas/vendedor.sql +++ b/models/br_mercadolivre_ofertas/vendedor.sql @@ -42,7 +42,58 @@ SELECT SAFE_CAST(predata.opinioes.regular AS INT64) AS avaliacao_ruim FROM main LEFT JOIN predata -ON main.id_vendedor = predata.id_vendedor) +ON main.id_vendedor = predata.id_vendedor), -SELECT * FROM tabela_ordenada +tabela_deduplicada AS ( + SELECT + PARSE_DATE('%Y-%m-%d', data_consulta) AS data_consulta, + id_municipio, + id_vendedor, + vendedor, + classificacao, + reputacao, + anos_experiencia, + ARRAY_AGG(avaliacao_bom)[OFFSET(0)] AS avaliacao_bom, + ARRAY_AGG(avaliacao_regular)[OFFSET(0)] AS avaliacao_regular, + ARRAY_AGG(avaliacao_ruim)[OFFSET(0)] AS avaliacao_ruim + FROM + tabela_ordenada + GROUP BY + data_consulta, + id_vendedor, + vendedor, + anos_experiencia, + reputacao, + classificacao, + id_municipio + HAVING + COUNT(*) > 1 +), tabela_unicos AS ( + SELECT + PARSE_DATE('%Y-%m-%d', data_consulta) AS data_consulta, + id_municipio, + id_vendedor, + vendedor, + classificacao, + reputacao, + anos_experiencia, + ARRAY_AGG(avaliacao_bom)[OFFSET(0)] AS avaliacao_bom, + ARRAY_AGG(avaliacao_regular)[OFFSET(0)] AS avaliacao_regular, + ARRAY_AGG(avaliacao_ruim)[OFFSET(0)] AS avaliacao_ruim + FROM + tabela_ordenada + GROUP BY + data_consulta, + id_vendedor, + vendedor, + anos_experiencia, + reputacao, + classificacao, + id_municipio + HAVING + COUNT(*) = 1 +) +SELECT * FROM tabela_unicos +UNION ALL +SELECT * FROM tabela_deduplicada