2
respostas

[Dúvida] Minha consulta "atraso_medio_dias" não fica em ordem decrescente na BigQuery

O que eu já tentei fazer...

1 - Atualizar a pagina do Colab
2 - Fechar o colab e abrir novamente
3 - Atualizar a pagina da Cloud
4 - Fechar a Cloud e abrir novamente
5 - Tirar o comando DESC da consulta e executar a celula, voltar o comando, executar novamente e repetir o passso 3
loop...

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

OBS. Na linha 3 do código abaixo você colocou caminho = 'alura-475420.olist_eccomerce.pedido_atrasos'
O correto não seria caminho = 'alura-475420.olist_dataset.pedido_atrasos'
No meu código só deu certo com "olist_dataset"
![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Resultado
![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

Olá, Cleiton!

Agradeço por compartilhar as imagens e o seu código. Você levantou dois pontos muito importantes, e o primeiro, sobre a ordenação, é um conceito fundamental quando trabalhamos com bancos de dados massivos como o BigQuery.

  1. Por que o ORDER BY não funciona na tabela final
    Você está absolutamente correto ao usar o ORDER BY atraso_medio_dias DESC na sua consulta SQL.

O que acontece:

  • Quando você executa a consulta SQL, o resultado (df_atraso) é um DataFrame do Pandas que está sim ordenado por atraso_medio_dias.

  • No entanto, quando você carrega esse DataFrame para uma nova tabela no BigQuery (pedido_atrasos), o BigQuery não mantém a ordem de inserção. Sistemas de Data Warehousing como o BigQuery armazenam os dados de forma otimizada para consultas rápidas (query time), não para manter uma ordem física.

  • O comando ORDER BY que você vê na sua consulta SQL é uma instrução para o resultado da consulta, mas ele não é uma propriedade de armazenamento da tabela em si.

Para resolver (ou confirmar) isso:

Se você quiser ver a tabela pedido_atrasos ordenada no BigQuery, você precisa executar uma nova consulta sobre essa tabela e incluir o ORDER BY nela:


SELECT *
FROM `alura-475420.olist_dataset.pedido_atrasos`
ORDER BY atraso_medio_dias DESC

A ordem que você vê na interface de "Visualização" é apenas a ordem em que os dados foram carregados ou a ordem padrão de exibição, e não a ordem garantida da tabela.

**Correção no Caminho (OBS)
**

Sobre a sua observação do caminho, você está de parabéns por notar e corrigir isso!

O correto não seria caminho = 'alura-475420.olist_dataset.pedido_atrasos'?

Sim, a correção que você fez, usando olist_dataset em vez de olist_eccomerce na variável caminho, é a correta. Isso acontece porque a estrutura do BigQuery exige o nome exato do dataset (conjunto de dados) para que o client_bq.load_table_from_dataframe funcione.

Bom dia João! Obrigado pela resposta!

Essa consulta que você me sugeriu só funciona aplicada direto no BigQuery para o BigQuery?

Se não em que passo devo aplica-la no Colab ou em outro editor de código?