DuckDB Data Lineage: Linhagem em nível de coluna para análises em andamento

linhagem de dados DuckDB é o mapa em nível de coluna de como os dados se movem pelo seu SQL do DuckDB: quais arquivos Parquet e tabelas de origem alimentam cada tabela derivada e por meio de quais junções, conversões, filtros e agregações. Gudu SQLFlow Constrói esse mapa automaticamente: analisa seus scripts DuckDB com um analisador de dialeto DuckDB dedicado e renderiza um diagrama de linhagem interativo, sem executar uma única consulta ou alterar seus dados.

Experimente agora: Cole qualquer consulta DuckDB no visualizador de linhagem SQL online gratuitoSelecione o dialeto DuckDB e obtenha um diagrama de linhagem em nível de coluna em segundos. Há um plano gratuito para uso individual.

Por que os pipelines do DuckDB merecem uma linhagem real?

O DuckDB se tornou, discretamente, uma infraestrutura de dados séria. Ele executa a camada de transformação em dbt-duckdb projetos, alimenta análises locais que posteriormente migram para o data warehouse, está incorporado em aplicativos e notebooks e, cada vez mais, serve como mecanismo de computação em data lakes Parquet. O SQL nesses pipelines toma os mesmos tipos de decisões que o SQL do data warehouse: calcula a receita, filtra clientes e constrói as tabelas que um dashboard lê.

No entanto, os projetos DuckDB geralmente não recebem o mesmo rigor de linhagem que um data warehouse. Há uma razão estrutural: a maioria das ferramentas de linhagem pressupõe um servidor de banco de dados. A linhagem baseada em logs de tempo de execução coleta logs de consulta de um mecanismo central; plataformas que priorizam o catálogo rastreiam os metadados de um servidor. O DuckDB é em processo: geralmente não há servidor, histórico de consultas compartilhado ou agente de catálogo para instalar. A lógica de transformação reside no processo. .sql Arquivos, modelos dbt e scripts armazenados em um repositório.

Isso faz da análise estática de SQL a maneira natural, e muitas vezes a única, de construir a linhagem de dados do DuckDB. O SQLFlow analisa o próprio texto SQL, portanto, funciona da mesma forma, independentemente de o SQL ser executado em um laptop, em um job de CI ou dentro de um processo de aplicativo.

Como o SQLFlow constrói a linhagem de dados do DuckDB

O SQLFlow é construído sobre o Analisador SQL Geral (GSP)DuckDB é um dos compiladores SQL comerciais desenvolvidos desde meados dos anos 2000 e validados com aproximadamente 13.600 conjuntos de testes SQL por dialeto. 39 bases de dados com um analisador sintático específico para cada dialeto. — não uma gramática ANSI genérica com a sintaxe do DuckDB simplesmente adicionada. O pipeline:

  1. Ingerir. Cole o SQL do DuckDB, carregue seus arquivos de script ou importe um manifesto dbt de um dbt-duckdb projeto.
  2. Analisar e resolver. O GSP constrói um modelo semântico completo de cada instrução, resolvendo cada referência de coluna por meio de CTEs, subconsultas, visualizações e SELECIONE * expansão.
  3. Extrair fluxo de dados. O analisador de fluxo de dados registra, para cada coluna de saída, exatamente quais colunas de origem a alimentam e por meio de quais funções, conversões, junções e operadores de conjunto.
  4. Visualize e exporte. Navegue pelo diagrama interativo, rastreie qualquer coluna a montante ou a jusante e exporte o gráfico como JSON, CSV ou PNG, ou obtenha-o através da API REST.

Exemplo: linhagem através de read_parquet() e CTAS

O padrão característico do DuckDB é CRIAR TABELA COMO SELECIONAR Leitura direta de arquivos — sem carregamento temporário, os arquivos Parquet são a fonte. Uma configuração típica de relatório:

CREATE TABLE reporting.daily_revenue AS SELECT CAST(o.order_ts AS DATE) AS order_date, c.region AS region, SUM(o.amount) AS revenue, COUNT(DISTINCT o.customer_id) AS buyers FROM read_parquet('lake/orders/*.parquet') AS o JOIN dim_customers AS c ON o.customer_id = c.customer_id WHERE o.status = 'completed' GROUP BY 1, 2;

O analisador DuckDB do SQLFlow entende ler_parquet() como fonte de tabela, de modo que o caminho Parquet apareça como um nó real no grafo de linhagem, em vez de uma chamada de função não resolvida. A partir dessa única instrução, ele extrai:

  • receita_diária.receita é alimentado por o.quantidade da fonte Parquet, através de SOMA().
  • receita_diária.data_do_pedido é alimentado por o.order_ts, através de um ELENCO para DATA.
  • receita_diária.região vem diretamente de dim_clientes.região.
  • o.status, o.cliente_id, e c.id_do_cliente nunca chegam à saída, mas a moldam, por isso o SQLFlow as registra como linhagem indireta (mais sobre isso abaixo).

Encadeie cinquenta dessas instruções em um projeto dbt ou em um script noturno e o gráfico se multiplica: o SQLFlow une todas as tabelas intermediárias para que você possa rastrear um número do painel até a coluna Parquet exata em que ele começou.

Linhagem direta versus linhagem indireta

No exemplo acima, o.status nunca aparece em receita_diária, mas mudando como status se preenchido, alteraria silenciosamente todos os valores de receita. O SQLFlow modela isso como linhagem indireta (de impacto): colunas usadas em ONDE, JUNTAR, e AGRUPAR POR Cláusulas e agregações internas formam um tipo de relacionamento distinto e alternável separadamente, além do fluxo de dados direto. A maioria das ferramentas concorrentes não faz essa distinção, o que significa que sua análise de impacto ignora exatamente as dependências que causam erros silenciosos nos dados.

Para um pipeline DuckDB, isso é importante em dobro: as fontes baseadas em arquivos não possuem chaves estrangeiras ou restrições para alertá-lo, portanto, o próprio SQL é o único lugar onde essas dependências são registradas.

Linhagem para projetos dbt-duckdb

dbt-duckdb é uma das maneiras mais comuns de o DuckDB ser executado em produção, e o próprio DAG do dbt para no nível do modelo: ele te diz receita_diária depende de stg_orders, não quais colunas carregam a dependência. O SQLFlow importa seu manifesto dbt e produz nível de coluna linhagem entre os modelos compilados, para que você possa responder “quais marts fazem stg_orders.amount "Você realmente vai alimentar?" antes de trocar.

A mesma análise se mostra útil no momento da migração. As equipes frequentemente criam protótipos no DuckDB e, posteriormente, promovem os modelos para outras plataformas. ClickHouse, PostgreSQLou um data warehouse na nuvem. Como o SQLFlow analisa todos esses dados com gramáticas específicas de cada dialeto, você pode mapear o verdadeiro grafo de dependências antes da migração e verificar se nada ficou órfão depois dela — usando uma única ferramenta e um único modelo de linhagem em ambos os lados.

Quais são as opções para a linhagem do DuckDB?

AbordagemBom emA lacuna para o DuckDB
Documentação manualCapturar a intenção e o contexto de negóciosObsoleto no dia seguinte à publicação; sem detalhes da coluna.
Analisadores de código aberto (linhagem sql, sqlglot)Analisando consultas individuais em um fluxo de trabalho Python; gratuitoVocê mesmo monta a resolução, a expansão estelar, a interconexão das declarações e a visualização; a linhagem indireta fica por sua conta.
linhagem baseada em logs de tempo de execuçãoObservar o que de fato foi executado em um servidor.Pressupõe-se um mecanismo central que emita registros; um DuckDB em execução em um laptop ou dentro de um aplicativo não tem nada a coletar.
Plataformas com foco em catálogoFluxos de trabalho de governança, responsabilidade, glossários em toda a pilha de tecnologia.A profundidade da linhagem depende da análise SQL específica de cada dialeto; scripts DuckDB incorporados raramente são fontes de primeira classe.
Gudu SQLFlowAnálise estática, em nível de coluna, do próprio texto SQL, com reconhecimento de dialetos, incluindo linhagem direta e indireta.Versão comercial para uso em equipe (plano gratuito para consultas individuais)

Essas opções não são mutuamente exclusivas. Se você já utiliza um catálogo, as implementações corporativas do SQLFlow exportam a linhagem para DataHub, Microsoft Purview e OpenMetadataAssim, ele se torna o mecanismo de análise sintática por trás do catálogo que você mantém.

Implantação e privacidade

O SQLFlow realiza apenas análises estáticas do código SQL; ele nunca lê as linhas das suas tabelas ou arquivos Parquet. Para equipes cujos scripts DuckDB codificam lógica proprietária, SQLFlow no local O SQLFlow Cloud é executado como Docker ou Kubernetes dentro da sua rede (instalações isoladas da internet são suportadas), portanto, nem mesmo o texto SQL sai da sua infraestrutura. O SQLFlow Cloud é gratuito a partir de £49,99/mês para a versão premium; a versão On-Premise custa £500/mês ou £4.800 (pagamento único) por tipo de banco de dados selecionado, e pode ser instalado em dois servidores. Ambos também são automatizáveis por meio de uma CLI sem interface gráfica e API REST, o que se alinha à cultura de automação intensiva e integração contínua (CI) da DuckDB.

No outro extremo da escala, o mesmo mecanismo realiza varreduras em lote de conjuntos de mais de 100 bancos de dados e mais de um milhão de colunas com varredura incremental e um repositório de linhagem persistente, de modo que a parte do DuckDB da sua pilha e o data warehouse possam coexistir em um único grafo de linhagem.

Perguntas frequentes

O SQLFlow consegue rastrear a linhagem através de read_parquet() e fontes de arquivo?

Sim. O analisador de dialetos do DuckDB trata ler_parquet() Como a fonte da tabela é definida, os caminhos dos arquivos aparecem como nós de origem no gráfico de linhagem e as colunas lidas do Parquet são rastreadas para as tabelas subsequentes como qualquer outra coluna.

Preciso executar minhas consultas no DuckDB para obter a linhagem?

Não. O SQLFlow realiza análise estática: ele analisa o texto SQL e nunca o executa. É por isso que ele é adequado para o DuckDB em processo, onde não há registro de consultas do lado do servidor para coletar.

O SQLFlow é compatível com projetos dbt-duckdb?

Sim. Importe o manifesto do dbt e o SQLFlow produzirá a linhagem em nível de coluna em seus modelos — mais detalhada do que o DAG em nível de modelo do próprio dbt.

O DuckDB oferece suporte a um analisador de dialetos real ou a SQL ANSI genérico?

Um analisador sintático de dialetos de verdade. O SQLFlow fornece analisadores sintáticos específicos para cada dialeto em 39 bancos de dados, incluindo o DuckDB, construídos com base em um mecanismo de análise sintática validado em aproximadamente 13.600 conjuntos de dados SQL de teste por dialeto.

É possível obter informações de linhagem a partir de scripts do DuckDB para alimentar meu catálogo de dados?

Sim. As implementações empresariais incluem adaptadores de exportação para DataHub, Microsoft Purview e OpenMetadata, além de exportação em JSON e CSV e uma API REST para integrações personalizadas.

Qual o custo do SQLFlow para a linhagem DuckDB?

O SQLFlow Cloud possui um plano gratuito; a versão premium custa £49,99/mês. A versão On-Premise custa £500/mês ou £4.800 (pagamento único) por tipo de banco de dados selecionado. Consulte preços Para mais detalhes.

Agora você pode rastrear seu pipeline do DuckDB.

Cole uma consulta DuckDB no visualizador gratuito e veja sua linhagem em nível de coluna, ou entre em contato conosco para analisarmos um projeto inteiro.