<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BIX</title>
    <description>The latest articles on DEV Community by BIX (@bixtecnologia).</description>
    <link>https://dev.to/bixtecnologia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4070359%2F8593455f-b5cf-4900-b302-eb63ca9bf5a8.png</url>
      <title>DEV Community: BIX</title>
      <link>https://dev.to/bixtecnologia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bixtecnologia"/>
    <language>en</language>
    <item>
      <title>Tutorial: IA Generativa nativa nas suas tabelas SQL com Snowflake Cortex</title>
      <dc:creator>BIX</dc:creator>
      <pubDate>Fri, 21 Aug 2026 18:52:10 +0000</pubDate>
      <link>https://dev.to/bixtecnologia/tutorial-ia-generativa-nativa-nas-suas-tabelas-sql-com-snowflake-cortex-oag</link>
      <guid>https://dev.to/bixtecnologia/tutorial-ia-generativa-nativa-nas-suas-tabelas-sql-com-snowflake-cortex-oag</guid>
      <description>&lt;p&gt;Até pouco tempo atrás, se você quisesse fazer análise de sentimento em 1 milhão de reviews de clientes, precisava extrair os dados do &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/bigquery-redshift-snowflake-comparativo-tecnico/" rel="noopener noreferrer"&gt;Data Warehouse&lt;/a&gt;&lt;/strong&gt;, passar por um &lt;strong&gt;script Python&lt;/strong&gt;, bater na &lt;strong&gt;API&lt;/strong&gt; da &lt;strong&gt;OpenAI&lt;/strong&gt; e devolver o resultado pro banco.&lt;/p&gt;

&lt;p&gt;Isso é lento, caro e um pesadelo de segurança. Com o &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/snowflake-cortex-analytics-ia-2026/" rel="noopener noreferrer"&gt;Snowflake Cortex&lt;/a&gt;&lt;/strong&gt;, a IA foi trazida para o banco. Você roda modelos fundacionais (Llama 3, Mistral) usando funções &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/solucoes-sql-server/" rel="noopener noreferrer"&gt;SQL&lt;/a&gt;&lt;/strong&gt; simples, direto na tabela.&lt;br&gt;
Neste hands-on, vou mostrar 3 funções prontas para uso no seu ambiente Snowflake.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. SNOWFLAKE.CORTEX.SENTIMENT (Análise Direta)
&lt;/h2&gt;

&lt;p&gt;Sem precisar de prompt. Você joga a string de texto e ele devolve um score de -1 (negativo) a 1 (positivo).&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;id_review&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;texto_review&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;SNOWFLAKE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CORTEX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SENTIMENT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto_review&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;score_sentimento&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;raw_reviews&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;data_review&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;CURRENT_DATE&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. SNOWFLAKE.CORTEX.TRANSLATE (Tradução em Batch)
&lt;/h2&gt;

&lt;p&gt;Ideal para normalizar logs de sistemas globais ou tickets de suporte de diferentes idiomas para o inglês, direto na pipeline dbt.&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;id_ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;SNOWFLAKE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CORTEX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;TRANSLATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;descricao_chamado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'pt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'en'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;descricao_ingles&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;suporte_latam&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. SNOWFLAKE.CORTEX.COMPLETE (Inferência Customizada)
&lt;/h2&gt;

&lt;p&gt;Aqui é onde a mágica do LLM acontece. Você escolhe o modelo e passa o prompt para criar categorias, resumos ou extrair JSON.&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;nome_produto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;SNOWFLAKE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CORTEX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COMPLETE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s1"&gt;'llama3-8b'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- Escolhendo o modelo&lt;/span&gt;
        &lt;span class="n"&gt;CONCAT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Crie uma descrição de marketing de 2 linhas para o produto: '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome_produto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;descricao_marketing&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dim_produtos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você não precisou gerenciar chaves de &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/design-de-apis-vantagem-competitiva/" rel="noopener noreferrer"&gt;API&lt;/a&gt;&lt;/strong&gt;, não precisou lidar com timeout de rede e seus dados sensíveis nunca saíram do perímetro governado do seu Data Warehouse.&lt;/p&gt;

</description>
      <category>snowflake</category>
      <category>sql</category>
      <category>machinelearning</category>
      <category>genai</category>
    </item>
    <item>
      <title>Como reduzir sua fatura do BigQuery em 80%: Particionamento, Clustering e BI Engine</title>
      <dc:creator>BIX</dc:creator>
      <pubDate>Fri, 21 Aug 2026 18:46:29 +0000</pubDate>
      <link>https://dev.to/bixtecnologia/como-reduzir-sua-fatura-do-bigquery-em-80-particionamento-clustering-e-bi-engine-4blc</link>
      <guid>https://dev.to/bixtecnologia/como-reduzir-sua-fatura-do-bigquery-em-80-particionamento-clustering-e-bi-engine-4blc</guid>
      <description>&lt;p&gt;Se você usa o &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/otimizacao-de-custos-no-bigquery/" rel="noopener noreferrer"&gt;Google BigQuery&lt;/a&gt;&lt;/strong&gt; no seu dia a dia, sabe que a precificação baseada em bytes escaneados pode ser uma armadilha. Uma query malfeita com &lt;em&gt;SELECT *&lt;/em&gt; numa tabela de 10TB pode custar dezenas de dólares em uma única execução.&lt;/p&gt;

&lt;p&gt;Neste tutorial prático, vou te mostrar como paramos de queimar dinheiro implementando três estratégias: &lt;br&gt;
Particionamento, Clustering e BI Engine. O ganho financeiro aqui é imediato.&lt;/p&gt;
&lt;h2&gt;
  
  
  O Problema (O Antes)
&lt;/h2&gt;

&lt;p&gt;Temos uma tabela transacional (&lt;em&gt;vendas_brutas&lt;/em&gt;) com 5 anos de histórico. Um analista precisa somar a receita do último mês.&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Custo estimado: 500 GB escaneados (aprox. US$ 2.50 por execução)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_brutas&lt;/span&gt; 
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;data_compra&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="s1"&gt;'2026-07-01'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1. Particionamento (Cortando o mal pela raiz)
&lt;/h3&gt;

&lt;p&gt;O particionamento divide a tabela física em pedaços menores baseados em uma coluna (geralmente data). Quando você filtra pela data particionada, o BigQuery simplesmente ignora as outras partições.&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Recriando a tabela com particionamento&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_particionadas&lt;/span&gt;
&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_compra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_brutas&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Nova Query: Custo estimado de 8 GB escaneados (aprox. US$ 0.04)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_particionadas&lt;/span&gt; 
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_compra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="s1"&gt;'2026-07-01'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Clustering (A sintonia fina)
&lt;/h3&gt;

&lt;p&gt;Se você já particionou por data, mas os usuários frequentemente filtram por &lt;em&gt;id_cliente&lt;/em&gt; ou &lt;em&gt;regiao&lt;/em&gt;, o Clustering organiza fisicamente os dados dentro de cada partição para acelerar esses filtros.&lt;/p&gt;

&lt;p&gt;SQL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_otimizadas&lt;/span&gt;
&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_compra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;CLUSTER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;regiao&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;id_cliente&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vendas_brutas&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. BI Engine (Para Dashboards)
&lt;/h3&gt;

&lt;p&gt;Se o seu problema não é volume de dados, mas sim a concorrência (ex: 50 diretores atualizando o &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/solucoes-looker-studio/" rel="noopener noreferrer"&gt;Looker Studio&lt;/a&gt;&lt;/strong&gt; ao mesmo tempo), o BI Engine aloca os dados quentes na memória RAM do BigQuery. As queries caem de 2 segundos para milissegundos, e as leituras no &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/solucoes-power-bi/" rel="noopener noreferrer"&gt;BI&lt;/a&gt;&lt;/strong&gt; Engine não cobram pelos bytes escaneados da tabela original.&lt;/p&gt;

&lt;p&gt;Aplicar apenas o Particionamento reduziu a fatura dessa pipeline específica em quase 80% na nossa infraestrutura. Custo em cloud é código.&lt;/p&gt;

</description>
      <category>bigquery</category>
      <category>sql</category>
      <category>dataengineering</category>
      <category>finops</category>
    </item>
    <item>
      <title>Tutorial Profundo: Rastreabilidade Total no Apache Airflow com OpenLineage</title>
      <dc:creator>BIX</dc:creator>
      <pubDate>Fri, 21 Aug 2026 18:36:47 +0000</pubDate>
      <link>https://dev.to/bixtecnologia/tutorial-profundo-rastreabilidade-total-no-apache-airflow-com-openlineage-19fa</link>
      <guid>https://dev.to/bixtecnologia/tutorial-profundo-rastreabilidade-total-no-apache-airflow-com-openlineage-19fa</guid>
      <description>&lt;p&gt;No ecossistema atual de Engenharia de Dados, a &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/observabilidade-com-langsmith-guia-monitoramento-llm/" rel="noopener noreferrer"&gt;observabilidade&lt;/a&gt;&lt;/strong&gt; (Data Observability) é o que separa pipelines maduros de sistemas que operam na base da esperança. Saber que uma DAG falhou no &lt;strong&gt;Apache Airflow&lt;/strong&gt; é o básico; o desafio real de governança é saber instantaneamente quais tabelas no &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/ja-possuo-um-data-warehouse-e-agora/" rel="noopener noreferrer"&gt;Data Warehouse&lt;/a&gt;&lt;/strong&gt;, quais modelos de ML e quais dashboards de diretoria foram impactados por essa falha.&lt;/p&gt;

&lt;p&gt;Para resolver isso sem precisar escrever logs customizados em cada task, o padrão de mercado atual é o &lt;strong&gt;OpenLineage&lt;/strong&gt;: um framework &lt;strong&gt;open-source&lt;/strong&gt; de observabilidade de dados. Neste tutorial prático, vamos instrumentar o Apache Airflow para emitir eventos de linhagem automaticamente para o &lt;strong&gt;Marquez&lt;/strong&gt; (o servidor backend de referência do OpenLineage).&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo a Arquitetura
&lt;/h2&gt;

&lt;p&gt;O OpenLineage não "lê" o seu banco de dados. Em vez disso, o Airflow atua como um emissor. Sempre que uma task começa ou termina, os Extractors nativos do &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/integrar-apache-airflow-openlineage-rastreabilidade/" rel="noopener noreferrer"&gt;Airflow&lt;/a&gt;&lt;/strong&gt; analisam o código SQL executado, identificam as tabelas de origem e destino (Inputs e Outputs) e disparam um evento JSON padronizado para o servidor do Marquez.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 1: Subindo a infraestrutura completa (Docker-Compose)
&lt;/h3&gt;

&lt;p&gt;Vamos subir um ambiente local contendo o Marquez (API e UI) e o Airflow configurado via variáveis de ambiente.&lt;/p&gt;

&lt;p&gt;`version: '3.8'&lt;br&gt;
services:&lt;br&gt;
  # O servidor backend que coleta e desenha a linhagem&lt;br&gt;
  marquez:&lt;br&gt;
    image: marquezproject/marquez:latest&lt;br&gt;
    ports:&lt;br&gt;
      - "5000:5000" # API do OpenLineage&lt;br&gt;
      - "5001:5001" # Interface Web&lt;/p&gt;

&lt;p&gt;# Instância do Airflow configurada para apontar para o Marquez&lt;br&gt;
  airflow:&lt;br&gt;
    image: apache/airflow:2.8.0&lt;br&gt;
    environment:&lt;br&gt;
      - AIRFLOW_&lt;em&gt;CORE&lt;/em&gt;&lt;em&gt;LOAD_EXAMPLES=False&lt;br&gt;
      - OPENLINEAGE_URL=&lt;a href="http://marquez:5000" rel="noopener noreferrer"&gt;http://marquez:5000&lt;/a&gt;&lt;br&gt;
      - OPENLINEAGE_NAMESPACE=meu_pipeline_producao&lt;br&gt;
      - AIRFLOW&lt;/em&gt;&lt;em&gt;OPENLINEAGE&lt;/em&gt;_DISABLED=False&lt;br&gt;
    ports:&lt;br&gt;
      - "8080:8080"&lt;br&gt;
    command: standalone&lt;br&gt;
`&lt;/p&gt;
&lt;h3&gt;
  
  
  Passo 2: Instalando o Provider no Airflow
&lt;/h3&gt;

&lt;p&gt;O suporte ao OpenLineage é nativo nas versões modernas do Airflow, mas você precisa garantir que o provider está instalado no seu ambiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;apache-airflow-providers-openlineage

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 3: Criando uma DAG Rastreável
&lt;/h3&gt;

&lt;p&gt;A mágica do OpenLineage é que ele requer zero alterações na lógica de negócios da sua DAG. Veja este exemplo simulando um ETL simples no PostgreSQL: Validando o Resultado&lt;/p&gt;

&lt;p&gt;Assim que a &lt;strong&gt;&lt;a href="https://bixtecnologia.com.br/airflow-vs-dagster-vs-prefect/" rel="noopener noreferrer"&gt;DAG&lt;/a&gt;&lt;/strong&gt; for executada com sucesso, abra o seu navegador em &lt;a href="http://localhost:5001" rel="noopener noreferrer"&gt;http://localhost:5001&lt;/a&gt; (Marquez UI). Você não verá apenas logs de execução, mas um grafo visual (DAG de dados, não de tarefas) mostrando que o dataset stg_vendas.transacoes_brutas é upstream do dataset dm_vendas.faturamento_diario. Se a tabela de staging dropar, você sabe exatamente qual métrica de faturamento vai quebrar amanhã de manhã.&lt;/p&gt;

&lt;p&gt;Implementar o OpenLineage é um quick win massivo para a engenharia: poucas linhas de configuração de infraestrutura geram um mapa de dependências que salva horas de troubleshooting no futuro.&lt;/p&gt;

&lt;p&gt;Versão completa disponível no &lt;a href="https://bixtecnologia.com.br/integrar-apache-airflow-openlineage-rastreabilidade/" rel="noopener noreferrer"&gt;link&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;`from airflow import DAG&lt;br&gt;
from airflow.providers.postgres.operators.postgres import PostgresOperator&lt;br&gt;
from datetime import datetime&lt;/p&gt;

&lt;p&gt;default_args = {&lt;br&gt;
    'owner': 'data_engineering_team',&lt;br&gt;
    'start_date': datetime(2026, 8, 1),&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;with DAG(&lt;br&gt;
    'processamento_vendas_diarias',&lt;br&gt;
    default_args=default_args,&lt;br&gt;
    schedule_interval='@daily',&lt;br&gt;
    catchup=False&lt;br&gt;
) as dag:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# O OpenLineage Extractor vai ler este SQL, dar parse no "INSERT INTO" e no "SELECT FROM",
# e criar a linhagem automaticamente relacionando as duas tabelas.
transform_data = PostgresOperator(
    task_id='transform_sales',
    postgres_conn_id='postgres_default',
    sql="""
    INSERT INTO dm_vendas.faturamento_diario 
    SELECT 
        data_venda, 
        SUM(valor) as receita_total 
    FROM stg_vendas.transacoes_brutas 
    WHERE status = 'pago'
    GROUP BY data_venda;
    """
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>airflow</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
