13 pontos por GN⁺ 2025-02-18 | 3 comentários | Compartilhar no WhatsApp

O que é a sintaxe Pipe Query?

  • Uma extensão da GoogleSQL que permite escrever consultas com uma estrutura linear, mais fácil de ler e manter
  • Suporta as mesmas operações da GoogleSQL existente (Standard SQL), como seleção, agrupamento, join e filtragem
  • Permite definir livremente a ordem das operações e escrever consultas complexas sem subconsultas aninhadas

Standard SQL vs sintaxe Pipe Query

  • Standard SQL
    • É preciso seguir uma ordem sintática específica
    • Ao usar múltiplas agregações, são necessárias CTEs (Common Table Expressions) ou subconsultas aninhadas
    • É necessário repetir colunas duplicadas em SELECT, GROUP BY e ORDER BY
  • Sintaxe Pipe Query
    • Os operadores pipe podem ser aplicados em qualquer ordem
    • É possível fazer múltiplas agregações de forma simples apenas adicionando operadores pipe
    • Basta declarar a coluna uma única vez

Estrutura básica da sintaxe Pipe Query

    1. Começa com a cláusula FROM
    1. Adicione operações após |> (operador pipe)
    1. Conecte vários operadores |> para montar a consulta em etapas
      (ex.: é possível alterar a ordem entre filtragem → agregação → join)
  • Características principais
    • É possível adicionar operadores pipe a qualquer consulta → dá para estender uma consulta GoogleSQL existente acrescentando um operador |> ao final
    • A ordem das operações é livre → os operadores podem ser aplicados na ordem desejada e quantas vezes forem necessárias
    • Pode ser usada em todos os ambientes compatíveis com GoogleSQL → utilizável em consultas, views, funções que retornam tabelas etc.
    • Pode ser combinada com a sintaxe SQL existente → subconsultas em Standard SQL e consulta principal em sintaxe Pipe
    • É possível referenciar todos os aliases definidos na etapa anterior
    • Pode começar com a cláusula FROM → depois, basta adicionar operadores |> para expandir a consulta gradualmente

Diferenças entre a sintaxe Pipe Query e o Standard SQL

  • A consulta pode começar com a cláusula FROM
  • O operador pipe de SELECT não realiza agregação. Para isso, usa-se separadamente o operador pipe AGGREGATE
  • A filtragem é feita com o operador pipe WHERE. Ele unifica as funções de WHERE, HAVING e QUALIFY do Standard SQL. A filtragem pode ser aplicada em qualquer etapa → permitindo escrever consultas com mais flexibilidade

Vantagens da sintaxe Pipe Query

  • Permite escrever consultas em uma ordem lógica → melhora a legibilidade
  • Facilita a manutenção → operações complexas podem ser feitas sem subconsultas aninhadas
  • Ordem de operações flexível → os operadores podem ser aplicados na sequência desejada
  • Filtragem mais intuitiva → uso de WHERE para filtrar dados em várias etapas
  • Facilita a escrita de consultas de agregação complexas → uso do operador AGGREGATE para agregações mais claras

O suporte está em fase Pre-GA e ainda é limitado

3 comentários

 
carnoxen 2025-02-18

https://github.com/tc39/proposal-pipeline-operator

É um operador bem familiar, não é?

 
halfenif 2025-02-18

Depois de ver o prql primeiro e então olhar a sintaxe de pipeline do Google, ela parece um pouco confusa.

 
GN⁺ 2025-02-18
Comentários do Hacker News
  • A sintaxe de pipe do SQL foi implementada no Databricks em 30 de janeiro de 2025

    • Antes, era difícil estender o SQL, e as funções de valor de tabela eram complexas
    • Agora é possível fazer enriquecimento de dados, previsões, agrupamentos etc. com funções de ordem superior
    • Por exemplo, é possível filtrar pedidos após uma determinada data, agregar o gasto total por cliente, depois filtrar clientes acima de um certo valor e fazer join com as informações dos clientes
    • SQL iterativo com pipes pode funcionar melhor junto com GenAI
  • PRQL é uma ideia semelhante que compila para SQL

    • Por exemplo, é possível filtrar dados de faturas, calcular taxas e depois filtrar os dados cuja receita esteja acima de um determinado valor
  • Se a expansão da sintaxe SQL continuar, a complexidade pode aumentar

    • Seria bom que os implementadores de SQL focassem mais em source maps e afins para dar melhor suporte a sintaxes alternativas externas
    • Isso permitiria que cada projeto ou pessoa escolhesse a variação de sintaxe SQL que melhor lhe convém
  • Quando a sintaxe de pipe foi anunciada pela primeira vez, a equipe do SQLite a testou

    • Eles descobriram que o caractere de pipe não era obrigatório, e a sintaxe também funcionava quando ele era opcional
    • Pessoalmente, acho que esse jeito fica mais bonito
  • PRQL é uma sintaxe orientada a pipes para bancos de dados SQL e, por ser uma linguagem nova, não tem compatibilidade retroativa com SQL

    • Não conta com o apoio de grandes empresas como o Google, mas a sintaxe é mais limpa
  • Também pode ser usado no DuckDB

  • Digitar ">" depois do pipe pode ser incômodo

  • A linguagem Malloy não usa sintaxe de pipe, mas tem uma sintaxe analítica semelhante

    • Foi desenvolvida por Lloyd Tabb, cofundador do Looker
  • Desde que comecei a usar Kusto Query Language, espero que o SQL passe a ter funcionalidades como essa

    • Se bancos de dados suficientes oferecerem isso como extensão, pode ter futuro