DEV Community

Cover image for BigQuery Legacy SQL vs Standard SQL
Henrique Vital
Henrique Vital

Posted on

BigQuery Legacy SQL vs Standard SQL

No Google BigQuery, existem dois dialetos de SQL disponíveis para consulta de dados: Legacy SQL e Standard SQL. Cada um possui características distintas, com diferenças em funcionalidade, sintaxe e compatibilidade. Abaixo, explico detalhadamente:


1. Legacy SQL

Descrição:

Legacy SQL é o dialeto SQL original do BigQuery, herdado das primeiras versões da ferramenta. Embora ainda seja suportado, o Google recomenda o uso do Standard SQL para novos projetos.

Características principais:

  • Sintaxe específica do BigQuery: Legacy SQL usa convenções de sintaxe que não seguem totalmente os padrões ANSI SQL.
  • Alias implícitos: Algumas funções e expressões geram automaticamente aliases para colunas, o que pode causar confusão em consultas mais complexas.
  • Suporte para tabelas não especificadas: Permite referências diretas a tabelas sem a necessidade de prefixá-las com um projeto ou dataset.
  • Suporte limitado a subconsultas: Legacy SQL tem limitações ao trabalhar com subconsultas e unificações mais avançadas.
  • Configuração: Consultas em Legacy SQL devem ser ativadas explicitamente em ferramentas que suportam ambos os dialetos.

Exemplo de consulta:

SELECT TOP(name, 10) as most_common_names FROM [project_id:dataset_id.table_name];
Enter fullscreen mode Exit fullscreen mode

2. Standard SQL

Descrição:

Standard SQL é baseado no padrão ANSI SQL e foi introduzido para aumentar a compatibilidade e funcionalidade das consultas. É o dialeto recomendado e habilitado por padrão no BigQuery.

Características principais:

  • Conformidade com ANSI SQL: Usa uma sintaxe mais universal, permitindo que desenvolvedores de SQL padrão se adaptem facilmente.
  • Referência explícita de tabelas: As tabelas devem ser especificadas com o formato project_id.dataset_id.table_name.
  • Funções mais robustas: Oferece suporte para funções de janela (window functions), joins complexos, subconsultas correlacionadas, arrays, JSON e muito mais.
  • Aliases explícitos: Requer que todas as colunas e expressões tenham aliases definidos, evitando ambiguidades.
  • Recomendações do Google: É o dialeto preferido para novas implementações devido à sua flexibilidade e compatibilidade.

Exemplo de consulta:

SELECT name, COUNT(*) as occurrences
FROM `project_id.dataset_id.table_name`
GROUP BY name
ORDER BY occurrences DESC
LIMIT 10;
Enter fullscreen mode Exit fullscreen mode

Principais Diferenças:

Aspecto Legacy SQL Standard SQL
Conformidade com ANSI SQL Não Sim
Ativação padrão Desativado Ativado
Referência a tabelas [project_id:dataset_id.table_name] `project_id.dataset_id.table_name`
Funções avançadas Suporte limitado Suporte completo
Subconsultas Restrito Totalmente compatível
Aliases Implícitos Requeridos explicitamente

Quando usar cada um?

  • Legacy SQL:

    Útil apenas em sistemas legados ou consultas já existentes que seriam trabalhosas para converter.

  • Standard SQL:

    É recomendado para qualquer novo projeto ou consulta. Ele é mais poderoso, legível, compatível com padrões industriais e recebe atualizações contínuas.

Se você estiver começando, foque no Standard SQL, pois ele é o futuro do BigQuery.

Top comments (0)