Python · pandas · Jupyter · PySpark · Databricks · Azure Synapse

Python para Engenharia de Dados – pandas, Jupyter, PySpark e Azure em uma so fonte

Utilizo Python como linguagem central em projetos modernos de engenharia de dados: desde a extracao de dados de sistemas fonte SQL Server, passando pela transformacao com pandas e pela analise exploratoria em Jupyter notebooks, ate a escrita de arquivos Parquet e Delta Lake no Azure Blob Storage. Em ambientes Databricks, utilizo PySpark para processamento distribuido de grandes volumes de dados. Analises estatisticas, validacao de dados e a integracao em pipelines do Azure Synapse e Azure Data Factory completam o quadro. Python nao e para mim uma ferramenta periferica -- e a linguagem que une stacks modernas de engenharia de dados.

Posicionamento

Python tornou-se a linguagem dominante em engenharia de dados nos ultimos anos. O que era antes um topico de nicho para cientistas de dados e hoje a base de plataformas de dados em empresas de todos os portes. O motivo e claro: Python combina uma sintaxe legivel com um ecossistema que cobre praticamente todos os requisitos na area de dados -- desde o simples processamento de CSV ate transformacoes complexas com pandas e a escrita de tabelas Delta Lake no Databricks em escala. Trabalho com Python no contexto de engenharia de dados, business intelligence e plataformas em nuvem ha muitos anos. A combinacao de experiencia em SQL Server, conhecimento em Azure e expertise em Python me permite construir solucoes de dados que funcionam de forma confiavel, sao manteniveis e se encaixam nas arquiteturas corporativas existentes.

O que me diferencia em projetos Python de perfis puramente de ciencia de dados e o foco em engenharia. Meu objetivo principal nao e construir modelos ou machine learning, mas transportar dados de forma confiavel de A para B: extrair, limpar, transformar, validar, persistir. Trabalhar em engenharia de dados requer entender como sistemas fonte SQL Server sao consultados, como escrever transformacoes pandas eficientes, como otimizar arquivos Parquet para ferramentas de BI posteriores e como orquestrar pipelines no Azure Data Factory ou Synapse. Trago esse quadro completo comigo.

Na pratica, isso significa: construi pipelines de extracao de sistemas SQL Server para um prestador de servicos texteis, gravando dados brutos como arquivos Parquet e Delta no Azure Blob Storage para processamento posterior em notebooks Databricks. As analises estatisticas de dados de RH e Controladoria rodaram em Jupyter notebooks que serviram simultaneamente como documentacao. Os Dataflows do Azure Synapse e Pipelines do ADF orquestraram a ordem de execucao. Essa interacao -- Python como nucleo de processamento, Azure como plataforma, Databricks como camada de escala -- e o padrao que realizo repetidamente em projetos corporativos de engenharia de dados.

Ideia central: Python em engenharia de dados corporativa nao e uma alternativa ao SQL ou SSIS -- e o seu complemento. A habilidade esta em escolher a ferramenta certa para a tarefa certa, e saber onde Python tem vantagens claras sobre ferramentas ETL classicas: flexibilidade, profundidade do ecossistema, reprodutibilidade e escalabilidade.

Python no Universo de Dados

A demanda por habilidades Python em projetos de engenharia de dados cresceu significativamente nos ultimos anos. Varios desenvolvimentos impulsionam essa demanda: Primeiro, plataformas de nuvem como Azure Databricks e Azure Synapse Analytics estabeleceram Python como uma linguagem de primeira classe -- os notebooks Databricks sao essencialmente notebooks Python e PySpark. Segundo, o ecossistema pandas atingiu uma maturidade que oferece alternativas genuinas ao SQL para tarefas de transformacao na cadeia de processamento de dados: JOINs, agregacoes GroupBy, pivots e limpeza de dados sao pelo menos tao precisamente expressaveis em pandas quanto em T-SQL, mas mais flexiveis para logica complexa. Terceiro, o Jupyter combina codigo, documentacao e visualizacao em um unico notebook, mudando fundamentalmente a analise exploratoria de dados e a comunicacao de resultados.

Por que Python e indispensavel em projetos corporativos hoje

Python costumava ser uma ferramenta marginal em grandes empresas -- um utilitario de scripting para tarefas ad-hoc. Isso mudou fundamentalmente. O Azure Databricks e utilizado hoje por numerosas grandes empresas como bloco de construcao central de sua plataforma de dados, e os notebooks Databricks rodam em Python ou PySpark. O Azure Data Factory pode invocar atividades Python diretamente. O Azure Synapse Analytics oferece notebooks Spark nativos. Quem trabalha nesses ambientes nao pode evitar Python. Trago experiencia de projetos corporativos reais: sei como escrever codigo Python que nao apenas roda localmente, mas tambem escala em clusters Databricks e pode ser incorporado em pipelines Azure.

O ecossistema Python no contexto de engenharia de dados

O ecossistema de dados Python e ao mesmo tempo amplo e profundo. No nucleo esta pandas para processamento de dados tabulares. NumPy fornece a base numerica. pyodbc e SQLAlchemy habilitam acesso a banco de dados para SQL Server, Oracle e outros sistemas. pyarrow e fastparquet sao as pontes para o formato Parquet. PySpark traz processamento Spark para Python. Great Expectations e Pandera sao frameworks para validacao de dados. Matplotlib, seaborn e plotly habilitam visualizacoes. openpyxl e xlrd conectam Python a saidas Excel para departamentos de negocios. Este ecossistema e a razao pela qual Python e tao poderoso na area de dados: para praticamente qualquer requisito existe uma biblioteca madura.

  • pandas: DataFrames, limpeza, joins, GroupBy, pivot, reshaping
  • NumPy: calculos numericos, operacoes vetoriais, funcoes estatisticas basicas
  • pyodbc / SQLAlchemy: conectividade SQL Server, connection pooling, camada ORM
  • pyarrow / fastparquet: leitura e escrita de arquivos Parquet
  • PySpark: processamento distribuido em Databricks e Synapse Spark pools
  • Great Expectations / Pandera: validacao de dados e verificacoes de schema
  • Jupyter / JupyterLab: notebooks interativos para analise e documentacao
  • Azure SDKs (azure-storage-blob, azure-synapse): integracao com a nuvem
Python nao e demandado por ser moderno, mas porque e a unica ferramenta que cobre simultaneamente analise exploratoria, logica ETL robusta, avaliacao estatistica e integracao em nuvem em uma unica linguagem. Nenhuma outra ferramenta alcanca essa amplitude com profundidade de ecossistema comparavel.

pandas: DataFrames, Limpeza, Joins, GroupBy

pandas e a pedra angular do meu kit de ferramentas Python para engenharia de dados. A biblioteca oferece uma abstracao poderosa sobre dados tabulares: o DataFrame. Um DataFrame se comporta de forma semelhante a uma tabela SQL, mas e mais flexivel: colunas podem ser adicionadas, transformadas e removidas dinamicamente; operacoes de linha rodam vetorizadas e portanto de forma eficiente; logica complexa pode ser expressa em sintaxe Python legivel. Na pratica diaria de engenharia de dados, utilizo pandas principalmente para tres tarefas: aquisicao e carregamento de dados, limpeza e transformacao, e agregacao e saida.

Carregando e explorando DataFrames

A forma mais simples de carregar dados em um DataFrame pandas e read_sql() com uma conexao SQLAlchemy -- o resultado e um DataFrame imediatamente utilizavel. Para tabelas muito grandes utilizo chunksize para controlar o consumo de memoria. A exploracao inicial com shape, dtypes, describe() e isnull().sum() revela imediatamente volume de dados, tipos e valores ausentes -- essa e a base para qualquer estrategia de limpeza.

Limpeza de dados: valores ausentes, tipos, duplicatas

Dados fonte reais raramente sao limpos. Valores ausentes, tipos incorretos, duplicatas e grafias inconsistentes sao a norma. pandas fornece os metodos certos para cada um desses casos: fillna() e dropna() tratam valores NaN; astype() converte tipos; drop_duplicates() remove duplicatas; str.strip(), str.upper() e str.replace() normalizam strings. Uma funcao de limpeza bem estruturada que executa esses passos sistematicamente e o primeiro bloco de construcao de qualquer pipeline robusta.

Joins, merges e GroupBy

pandas merge() implementa joins no estilo SQL (INNER, LEFT, RIGHT, OUTER) entre DataFrames. Para joins simples baseados em indice existe join(). Agregacoes GroupBy com groupby().agg() correspondem ao GROUP BY em SQL, mas sao mais flexiveis: qualquer funcao de agregacao pode ser passada, incluindo funcoes lambda definidas pelo usuario. pivot_table() e crosstab() geram analises de tabela dinamica. Essa combinacao cobre quase todos os requisitos de transformacao relacional.

Pipeline de dados do SQL Server passando por Python/pandas ate Parquet/Delta Lake

Pipeline tipica de extracao e transformacao: SQL Server como fonte, Python com pyodbc/SQLAlchemy para extracao, pandas para limpeza e transformacao, Parquet/Delta Lake como formato de saida no Azure Blob Storage.

Python · pandas -- extrair SQL Server, limpar, mesclar, gravar Parquet
import pandas as pd
import sqlalchemy as sa
import pyarrow as pa
import pyarrow.parquet as pq
from datetime import date

# -- Estabelecer conexao com SQL Server (Autenticacao Windows) -------------
engine = sa.create_engine(
    "mssql+pyodbc://nomeservidor/nomedatabase"
    "?driver=ODBC+Driver+17+for+SQL+Server&trusted_connection=yes"
)

# -- Carregar dados brutos: pedidos e produtos -----------------------------
sql_pedidos = (
    "SELECT p.pedido_id, p.cliente_id, p.data_pedido, "
    "p.status, p.valor_bruto "
    "FROM dbo.pedidos p "
    "WHERE p.data_pedido >= '2024-01-01'"
)
sql_produtos = "SELECT produto_id, descricao, categoria FROM dbo.produtos"

df_pedidos  = pd.read_sql(sql_pedidos,  engine)
df_produtos = pd.read_sql(sql_produtos, engine)

# -- Limpeza: valores ausentes, tipos, duplicatas --------------------------
df_pedidos["valor_bruto"] = pd.to_numeric(
    df_pedidos["valor_bruto"], errors="coerce"
)
df_pedidos.dropna(subset=["valor_bruto"], inplace=True)
df_pedidos.drop_duplicates(subset=["pedido_id"], inplace=True)
df_pedidos["status"]      = df_pedidos["status"].str.strip().str.upper()
df_pedidos["data_pedido"] = pd.to_datetime(df_pedidos["data_pedido"])

# -- LEFT JOIN: mesclar pedidos com cadastro de produtos ------------------
df_mesclado = df_pedidos.merge(
    df_produtos,
    how="left",
    left_on="produto_id",
    right_on="produto_id"
)

# -- Agregacao GroupBy: receita por categoria e mes ------------------------
df_mesclado["mes"] = df_mesclado["data_pedido"].dt.to_period("M")
df_agg = (
    df_mesclado
    .groupby(["categoria", "mes"])
    .agg(
        qtd_pedidos=("pedido_id",  "count"),
        receita_total=("valor_bruto", "sum"),
        receita_media=("valor_bruto", "mean"),
    )
    .reset_index()
)

# -- Gravar resultado como dataset Parquet (particionado por mes) ---------
tabela = pa.Table.from_pandas(df_agg)
pq.write_to_dataset(
    tabela,
    root_path="/mnt/datalake/pedidos_agg",
    partition_cols=["mes"],
)
print(f"Gravado: {len(df_agg)} linhas, {df_agg['receita_total'].sum():.2f} EUR receita total")

Este exemplo mostra o caminho completo: conexao SQL Server via SQLAlchemy, limpeza de dados, LEFT JOIN entre dois DataFrames, agregacao GroupBy e gravacao particionada como dataset Parquet. Comentarios em portugues para manutencao.

pandas nao e apenas uma ferramenta de ciencia de dados -- e um framework ETL completo para volumes de dados medianos. A combinacao de sintaxe legivel, amplo conjunto de funcionalidades e integracao perfeita com Parquet faz dele a espinha dorsal de muitas pipelines modernas de dados.

Jupyter Notebooks: Analise Exploratoria e Documentacao

Os Jupyter notebooks mudaram fundamentalmente a forma como as analises de dados sao realizadas e comunicadas. Um notebook combina codigo Python executavel com documentacao Markdown, formulas matematicas e visualizacoes em um unico documento. O resultado nao e apenas um resultado de analise, mas simultaneamente sua documentacao e instrucoes de reproducao. Para mim, os Jupyter notebooks sao a ferramenta preferida para analise exploratoria de dados, para desenvolvimento e teste de nova logica de transformacao e para apresentacao de resultados de analise a departamentos de negocios.

Analise exploratoria: entender os dados antes de transforma-los

Antes de construir uma pipeline de dados, exploro os dados fonte sistematicamente em um Jupyter notebook. A abordagem tipica: carregar dados, verificar shape e dtypes, examinar distribuicoes com describe() e value_counts(), visualizar valores ausentes e identificar colunas correlacionadas. Essa fase exploratoria tipicamente leva algumas horas, mas poupa dias de depuracao mais tarde na pipeline, pois problemas no material fonte ficam visiveis cedo.

Notebooks como documentacao viva

Um Jupyter notebook bem estruturado e mais do que um script -- e um registro rastreaval dos passos de analise. Celulas Markdown explicam por que uma decisao de limpeza foi tomada; celulas de codigo mostram como foi implementada; celulas de saida documentam o resultado. Esse principio -- codigo, decisao e resultado em um unico arquivo -- e igualmente valioso para clientes e desenvolvedores subsequentes: o processo de analise e reproduzivel, rastreaval e modificavel. Uso nbconvert para exportar notebooks como relatorios HTML que podem ser lidos sem conhecimento de Python.

Notebooks Databricks e a entrega para pipelines

Os notebooks Databricks sao essencialmente Jupyter notebooks estendidos rodando em um cluster Spark. A logica desenvolvida localmente em um Jupyter notebook como DataFrame pandas pode ser migrada para um DataFrame PySpark no Databricks e escalada para grandes volumes de dados. Tipicamente desenvolvo logica em um Jupyter notebook local contra uma amostra representativa dos dados, testo e documento la, depois porto a logica final para um notebook Databricks que roda como parte de uma pipeline ADF ou um job de Workflow Databricks.

Python · Jupyter -- analise exploratoria e relatorio automatizado
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import warnings

matplotlib.use("Agg")    # janela interativa nao necessaria
warnings.filterwarnings("ignore")

# -- Carregar dados de exemplo (aqui: CSV, na pratica: SQL Server) --------
df = pd.read_csv("exportacao_controladoria.csv", sep=";", encoding="utf-8-sig",
                 parse_dates=["data_lancamento"])

# -- Visao geral: forma, tipos, valores ausentes ---------------------------
print("Forma:        ", df.shape)
print("Tipos:
",        df.dtypes)
print("Proporcao NaN:
", df.isnull().mean().round(3))

# -- Analisar distribuicao de centros de custo ----------------------------
df["centro_custo"].value_counts().head(10).plot(
    kind="barh", figsize=(9, 5),
    title="Top 10 Centros de Custo por Numero de Lancamentos",
    color="#2563eb"
)
plt.tight_layout()
plt.savefig("top10_centros_custo.png", dpi=120)
plt.close()

# -- Totais mensais por tipo de custo -------------------------------------
df["mes"] = df["data_lancamento"].dt.to_period("M")
mensais = (
    df.groupby(["mes", "tipo_custo"])["valor"]
    .sum()
    .unstack(fill_value=0)
)
print("
Tipos de custo mensais (trecho):")
print(mensais.tail(6))

# -- Outliers: lancamentos acima do percentil 99 --------------------------
p99 = df["valor"].quantile(0.99)
outliers = df[df["valor"] > p99][["data_lancamento", "centro_custo", "valor"]]
print(f"
Outliers (> P99 = {p99:.2f} EUR): {len(outliers)} lancamentos")
print(outliers.head())

# -- Salvar resultado como CSV para compartilhamento ----------------------
outliers.to_csv("relatorio_outliers.csv", index=False)
print("Analise concluida. Resultados salvos.")

Este trecho de notebook mostra o padrao de analise exploratoria: carregar dados, verificar estatisticas basicas, visualizar e identificar outliers. Na pratica, esse padrao roda diretamente no JupyterLab ou como notebook Databricks.

Os Jupyter notebooks nao sao brinquedos para cientistas de dados -- sao uma ferramenta profissional de documentacao e analise. Quem quer tornar resultados de analise rastreaveis e compartilhaveis com departamentos de negocios encontrara nos notebooks uma solucao indispensavel. A combinacao de codigo e explicacao em um documento poupa consideravel esforco de comunicacao.

Extracao: SQL Server para Parquet / Delta

Extrair dados de sistemas fonte SQL Server e armazena-los como arquivos Parquet ou Delta e um padrao central em pipelines modernas de dados. O ETL classico baseado em SSIS roda diretamente no SQL Server e grava em outro banco de dados SQL Server. O padrao moderno, por sua vez, extrai do SQL Server via Python e grava em um data lake na nuvem no Azure Blob Storage -- como arquivos Parquet para legibilidade simples ou como tabelas Delta para transacoes ACID e funcionalidade de Time Travel. Implementei esse padrao em projetos reais e conheco as armadilhas: estabilidade de conexao com grandes volumes de dados, problemas de conjunto de caracteres com colunas NVARCHAR, conversoes DateTime e a estrategia certa de particionamento para o data lake destino.

pyodbc e SQLAlchemy: conexao com SQL Server

Para acesso ao SQL Server a partir do Python existem duas bibliotecas comuns: pyodbc e um wrapper direto do driver ODBC, excelente para consultas simples e leituras em lote. SQLAlchemy fornece adicionalmente uma camada ORM, connection pooling e uma camada de dialeto padronizada que simplifica a troca entre tipos de banco de dados. Para pandas read_sql() recomendo sempre SQLAlchemy como objeto de conexao porque harmoniza melhor com o batching interno do pandas. Para Azure SQL com autenticacao Entra ID (anteriormente Azure AD) utilizo ODBC Driver 18 com Managed Identity ou Service Principal para pipelines headless.

Leituras em blocos para tabelas grandes

Tabelas muito grandes nao podem ser carregadas na memoria de uma so vez. pandas read_sql() suporta o parametro chunksize, que divide a tabela em blocos de N linhas e retorna um iterador sobre DataFrames. Cada bloco pode ser gravado imediatamente como arquivo Parquet. O resultado e um dataset Parquet particionado que roda de forma confiavel mesmo para tabelas com milhoes de linhas sem esgotar a memoria. Para volumes ainda maiores utilizo PySpark no Databricks, que pode executar a extracao de forma distribuida.

Arquitetura Medallion Bronze-Prata-Ouro com pandas e PySpark

Arquitetura medallion de tres camadas: Bronze (dados brutos, extraidos diretamente do SQL Server), Prata (limpo e validado por transformacoes pandas), Ouro (agregado e pronto para BI, armazenado como tabela Delta no Databricks).

Parquet como formato de intercambio universal

Parquet e o formato colunar preferido para arquiteturas de data lake: comprime fortemente (tipicamente 3-10x em relacao ao CSV), suporta predicate pushdown para ler apenas colunas e linhas relevantes ao consultar, e e independente de linguagem -- Python, Spark, SQL Server PolyBase, Azure Synapse e Power BI podem todos trabalhar nativamente com Parquet. Para gravar Parquet utilizo pyarrow como backend, que e mais rapido e mais eficiente em memoria do que fastparquet para a maioria dos casos de uso.

SQL Server como fonte e Parquet como saida -- essa combinacao e hoje padrao em projetos corporativos de engenharia de dados. Python e o cimento entre eles: flexivel o suficiente para logica complexa de transformacao, eficiente o suficiente para grandes volumes e integrado perfeitamente nas plataformas de nuvem Azure.

PySpark e Databricks

PySpark e a interface Python para o Apache Spark e a linguagem principal na qual os notebooks Databricks sao escritos. Enquanto as operacoes de DataFrame pandas rodam em uma unica maquina, PySpark escala para tamanho de cluster: um cluster Databricks pode fornecer centenas de nucleos e terabytes de RAM, processando ate volumes de dados muito grandes em tempo razoavel. Para tarefas de engenharia de dados em projetos corporativos isso significa: quando o volume de dados excede a capacidade de uma unica maquina, ou quando tempos de processamento muito curtos sao necessarios, PySpark e a ferramenta certa.

PySpark vs. pandas: quando usar qual?

pandas e ideal para datasets de ate alguns gigabytes que cabem completamente na memoria. E mais simples de escrever, depurar e testar. PySpark e utilizado quando os dados excedem a capacidade de uma unica maquina, quando paralelismo de execucao distribuida e necessario, ou quando a infraestrutura ja tem um cluster Databricks e o processamento deve rodar embarcado la. Na pratica frequentemente desenvolvo em pandas e porto para PySpark para producao escalada no Databricks.

Databricks como ambiente de execucao

O Databricks unifica gerenciamento de cluster Spark, desenvolvimento de notebooks, orquestracao de workflows e suporte a Delta Lake em uma unica plataforma. Em um projeto para um prestador de servicos texteis, criei notebooks Databricks que extraiam dados de fontes SQL Server, persistiam como tabelas Delta e tornavam acessivel para relatorios BI via Azure Synapse Analytics. Os jobs Databricks rodavam como parte de uma pipeline Azure Data Factory e eram executados diariamente as 3h da manha.

Python · PySpark -- extrair SQL Server e gravar como tabela Delta (Databricks)
# Este notebook roda em um cluster Databricks (contexto PySpark disponivel)
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import StructType, StructField, StringType, DoubleType, DateType

# -- Sessao Spark (no Databricks implicitamente disponivel como 'spark') --
spark = SparkSession.builder.getOrCreate()

# -- Conexao JDBC com SQL Server (credenciais via Databricks Secrets) -----
jdbc_url = (
    "jdbc:sqlserver://meu-servidor.database.windows.net:1433;"
    "database=BancoDeDadosFonte;encrypt=true;trustServerCertificate=false;"
    "hostNameInCertificate=*.database.windows.net;loginTimeout=30"
)
jdbc_props = {
    "user":     dbutils.secrets.get("kv-scope", "sql-user"),
    "password": dbutils.secrets.get("kv-scope", "sql-password"),
    "driver":   "com.microsoft.sqlserver.jdbc.SQLServerDriver",
    # Paralelizacao: Spark le em 8 particoes simultaneamente
    "numPartitions": "8",
    "partitionColumn": "pedido_id",
    "lowerBound": "1",
    "upperBound": "10000000",
}

# -- Carregar tabela fonte como DataFrame Spark ----------------------------
df_bruto = spark.read.jdbc(
    url=jdbc_url,
    table="dbo.pedidos",
    properties=jdbc_props,
)

# -- Limpeza e transformacao em PySpark -----------------------------------
df_limpo = (
    df_bruto
    .filter(F.col("status").isin(["CONCLUIDO", "ENVIADO"]))
    .withColumn("valor_liquido", F.round(F.col("valor_bruto") / 1.12, 2))
    .withColumn("ano_mes",       F.date_format("data_pedido", "yyyy-MM"))
    .dropDuplicates(["pedido_id"])
)

# -- Agregacao: receita por mes e categoria -------------------------------
df_agg = (
    df_limpo
    .groupBy("ano_mes", "categoria")
    .agg(
        F.count("pedido_id").alias("quantidade"),
        F.sum("valor_liquido").alias("receita_liquida"),
        F.avg("valor_liquido").alias("receita_media"),
    )
    .orderBy("ano_mes", "categoria")
)

# -- Gravar como tabela Delta (sobrescrever a cada execucao) ---------------
delta_caminho = "abfss://datalake@minhaconta.dfs.core.windows.net/ouro/pedidos_agg"
df_agg.write.format("delta").mode("overwrite").save(delta_caminho)

print(f"Tabela Delta gravada: {df_agg.count()} linhas")

Este notebook mostra a pipeline PySpark completa no Databricks: extracao JDBC do SQL Server com particoes paralelas, limpeza e agregacao em PySpark, gravacao como tabela Delta no Azure Data Lake Storage Gen2. Credenciais sao carregadas de forma segura via Databricks Secrets (Azure Key Vault).

Databricks e mais do que um cluster Spark. E uma plataforma completa de engenharia de dados com orquestracao de workflows, transacoes Delta Lake, Unity Catalog para governanca de dados e integracao perfeita com Azure. Uma vez trabalhando no Databricks, entende-se por que ele se estabeleceu como o padrao corporativo.

Delta Lake: Transacoes ACID e Time Travel

Delta Lake e uma camada de armazenamento de codigo aberto construida sobre arquivos Parquet que adiciona transacoes ACID, imposicao de schema, operacoes de update/delete/merge e funcionalidade de Time Travel. No Databricks, Delta Lake e o formato de armazenamento padrao: quando voce cria uma tabela no Databricks ela e por padrao uma tabela Delta. Utilizei Delta Lake em projetos de producao e conheco o valor que agrega em relacao a arquivos Parquet simples: as operacoes MERGE habilitam logica upsert (inserir se nao presente; atualizar se presente), que implementa o tratamento classico de dimensoes de mudanca lenta de forma limpa e similar ao SQL. O Time Travel permite consultar uma versao mais antiga da tabela -- uma vantagem enorme ao depurar e solucionar problemas em pipelines.

MERGE no Delta Lake: logica upsert

O comando MERGE no Delta Lake corresponde ao MERGE (UPSERT) no SQL Server e e um dos recursos mais poderosos do Delta. Em uma pipeline de extracao tipica, novos registros sao inseridos e os existentes atualizados sem sobrescrever a tabela inteira. Isso reduz substancialmente o volume de escrita e torna as pipelines idempotentes: re-executar a pipeline nao muda o resultado se os dados fonte nao mudaram.

Particionamento e Z-ordering

As tabelas Delta podem ser particionadas por uma ou mais colunas, o que acelera consultas de leitura que filtram por essas colunas. Alem disso, o Delta Lake suporta Z-ordering, uma tecnica de organizacao de dados que otimiza multiplas colunas simultaneamente, co-localizando valores similares fisicamente dentro dos arquivos Parquet. Para consultas BI tipicas que filtram por data e categoria, o Z-ordering pode reduzir o tempo de consulta por um fator de 5 a 10.

  • Transacoes ACID: operacoes de escrita atomicas, sem estado de escrita parcial
  • Imposicao de schema: colunas divergentes em dados de entrada sao rejeitadas
  • Evolucao de schema: novas colunas podem ser adicionadas de forma controlada
  • MERGE/UPSERT: inserir e atualizar em um unico passo, idempotente
  • Time Travel: consultar versoes antigas da tabela (por data ou numero de versao)
  • VACUUM: limpar versoes antigas de arquivos, liberar espaco de armazenamento
  • Optimize + Z-Order: compactar arquivos pequenos, melhorar desempenho de consultas
Delta Lake torna as pipelines de dados mais confiaveis, rastreaveis e faceis de manter. MERGE como mecanismo upsert e Time Travel como ferramenta de depuracao sao dois recursos dos quais nao me passaria por pipelines de dados de producao.

Validacao de Dados com Python

Qualidade de dados nao e um requisito opcional, mas o pre-requisito para relatorios de BI e analises confiaveis. Na pratica, os dados fonte sao frequentemente defeituosos: a integridade referencial nao e aplicada, campos obrigatorios estao vazios, valores estao fora de intervalos plausíveis, valores de data chegam no formato errado. Nao detectar esses problemas sistematicamente permite que erros entrem no data lake despercebidos, onde surgem mais tarde em relatorios de BI -- em um ponto em que rastrear a causa raiz e dificil. Python fornece varias abordagens para validacao de dados que aplico conforme os requisitos do projeto.

Assertions simples em pandas

Para verificacoes rapidas em notebooks de extracao, assertions pandas sao suficientes: assert df['valor'].ge(0).all() verifica que todos os valores sao nao negativos. assert df['cliente_id'].notna().all() verifica campos obrigatorios completos. assert df.duplicated('pedido_id').sum() == 0 verifica chaves unicas. Essas assertions sao executadas imediatamente apos o carregamento de dados; em caso de violacao, Python levanta um AssertionError que interrompe a pipeline e registra o problema.

Pandera para validacao baseada em schema

Pandera e uma biblioteca que valida DataFrames pandas contra um schema declarativamente definido. O schema especifica tipos de dados permitidos, intervalos de valores, propriedades nullable e verificacoes definidas pelo usuario. Quando o DataFrame viola o schema, Pandera fornece um relatorio de erro detalhado com referencias de linha e coluna. Em pipelines de producao insiro validacoes Pandera entre extracao e transformacao: a extracao fornece dados brutos; Pandera os verifica; somente quando a verificacao passa a transformacao comeca. Isso reduz substancialmente o numero de mensagens de erro crípticas mais adiante no processo.

Python · funcao de validacao de dados com assertions pandas e Pandera
import pandas as pd
import pandera as pa
from pandera import Column, DataFrameSchema, Check
import logging

logger = logging.getLogger(__name__)

# -- Definir schema Pandera para a tabela de pedidos ----------------------
schema_pedidos = DataFrameSchema(
    columns={
        "pedido_id":  Column(int,   nullable=False, unique=True),
        "cliente_id": Column(int,   nullable=False),
        "data_pedido": Column("datetime64[ns]", nullable=False),
        "valor_bruto": Column(float, Check.ge(0.0),  nullable=False),
        "status":      Column(str,
                              Check.isin(["NOVO", "ENVIADO", "CONCLUIDO", "CANCELADO"]),
                              nullable=False),
    },
    # Colunas extras desconhecidas sao permitidas (strict=False)
    strict=False,
)

def validar_pedidos(df: pd.DataFrame) -> pd.DataFrame:
    # Valida um DataFrame de pedidos contra o schema definido.
    # Retorna o DataFrame validado ou levanta erro em caso de falha.
    # Saida de log no nivel INFO.

    # Passo 1: assertions simples (rapidas, sem biblioteca necessaria)
    assert df["pedido_id"].notna().all(),           "ERRO: IDs de pedido vazios encontrados"
    assert not df.duplicated("pedido_id").any(),    "ERRO: IDs de pedido duplicados"
    assert (df["valor_bruto"] >= 0).all(),           "ERRO: Valores negativos nos dados fonte"

    # Passo 2: validacao de schema Pandera (relatorio de erro detalhado)
    try:
        df_valid = schema_pedidos.validate(df, lazy=True)
        logger.info("Validacao aprovada: %d linhas verificadas", len(df_valid))
        return df_valid
    except pa.errors.SchemaErrors as e:
        # Registrar linhas e colunas com falha
        logger.error("Erros de schema:
%s", e.failure_cases.to_string())
        raise

# -- Uso na pipeline -------------------------------------------------------
if __name__ == "__main__":
    import sqlalchemy as sa
    engine  = sa.create_engine(
        "mssql+pyodbc://srv/db?driver=ODBC+Driver+17+for+SQL+Server&trusted_connection=yes"
    )
    df_bruto = pd.read_sql(
        "SELECT * FROM dbo.pedidos WHERE data_pedido >= '2024-01-01'", engine
    )
    df_ok    = validar_pedidos(df_bruto)
    print(f"Validacao aprovada: {len(df_ok)} linhas prontas para transformacao.")

Esta funcao de validacao combina assertions pandas simples com validacao de schema Pandera. O flag lazy=True garante que todos os erros sejam coletados e reportados de uma vez -- nao apenas o primeiro erro.

A validacao de dados nao e uma rede de seguranca retrospectiva, mas parte integrante da arquitetura da pipeline. Detectar erros mais cedo -- diretamente apos a extracao -- economiza esforco substancial de depuracao e evita que dados incorretos cheguem ao data lake.

Analises Estatisticas com Python

Os projetos de engenharia de dados raramente envolvem apenas mover dados de um lugar para outro. Analises estatisticas frequentemente surgem: analises de distribuicao, deteccao de outliers, analise de series temporais, analises de correlacao e agregacoes que vao alem de simples somas e medias. Implementei analises estatisticas para dados de RH e Controladoria para um prestador de servicos texteis em Jupyter notebooks: analises de variancia mensais, deteccao de outliers baseada em percentis, analises de tendencia e comparacoes entre centros de custo e periodos. Python e a ferramenta ideal para essas tarefas: NumPy e scipy fornecem os metodos estatisticos; pandas fornece a estrutura de dados; matplotlib e seaborn criam visualizacoes significativas.

Estatistica descritiva e deteccao de outliers

O primeiro passo em qualquer analise estatistica e a estatistica descritiva: media, mediana, desvio padrao, quartis e valores extremos. pandas describe() fornece essas metricas com um unico comando. Para deteccao de outliers utilizo a abordagem baseada em IQR (intervalo interquartil): valores fora de Q1 - 1,5*IQR ate Q3 + 1,5*IQR sao sinalizados como outliers. Esse metodo e mais robusto do que a abordagem simples de Z-score porque e menos sensivel a valores extremos individuais.

Series temporais e tendencias

Analises de series temporais sao particularmente relevantes em projetos de Controladoria e RH: como a receita evolui ao longo do tempo? Existem padroes sazonais? Como uma metrica se compara com o mesmo periodo do ano anterior? pandas resample() e rolling() fornecem ferramentas poderosas para agregacoes de series temporais e medias moveis. A visualizacao com matplotlib ou seaborn torna tendencias e outliers imediatamente visiveis. Para departamentos de negocios exporto resultados como arquivos Excel com openpyxl que podem ser integrados diretamente em processos de relatorios existentes.

Analises de correlacao e analises de tabela dinamica

Matrizes de correlacao com df.corr() revelam rapidamente quais variaveis estao linearmente relacionadas -- util para identificar colunas redundantes em um modelo dimensional ou para explorar fatores de influencia em uma variavel alvo. Analises de tabela dinamica com pd.pivot_table() permitem exibir metricas em uma tabela cruzada bidimensional familiar do Excel. Essas saidas sao frequentemente entregues diretamente como relatorios Excel para departamentos de Controladoria.

As analises estatisticas fazem cada vez mais parte do escopo de projetos de engenharia de dados. Python combina processamento de dados, estatistica e visualizacao em um unico ambiente -- evitando o desvio por ferramentas estatisticas especializadas como R ou SPSS para tarefas de analise padrao.

Integracao Azure: Synapse, ADF, Blob Storage

Solucoes de engenharia de dados baseadas em Python em projetos corporativos quase sempre rodam em infraestrutura Azure. A conexao entre codigo Python e servicos Azure e fornecida pelos SDKs Azure oficiais, que fornecem uma biblioteca Python para cada servico: azure-storage-blob para Blob Storage, azure-synapse-spark para notebooks Synapse Spark, azure-keyvault-secrets para gerenciamento seguro de senhas, azure-identity para autenticacao Entra ID. Em projetos combinei todos esses: notebooks Python no Databricks que leem credenciais do Azure Key Vault, gravam dados no Blob Storage e sao executados pelo Azure Data Factory como atividades de pipeline.

Azure Blob Storage: leitura e escrita

O Azure Blob Storage e o armazenamento data lake preferido para pipelines de dados Python no Azure. Com a biblioteca azure-storage-blob, arquivos podem ser lidos, gravados e gerenciados. Para arquivos Parquet voce pode gravar diretamente via a biblioteca Blob Storage ou via o protocolo abfss:// (Azure Data Lake Storage Gen2), que e nativamente suportado por pyarrow e PySpark. No Databricks, ADLS Gen2 e montado como ponto de montagem, simplificando o acesso a caminhos de arquivo com notacao /mnt/...

Azure Data Factory: Python como atividade de pipeline

O Azure Data Factory pode incorporar scripts Python e notebooks Databricks como atividades em pipelines. O padrao e: pipeline ADF com um gatilho (baseado em tempo ou evento) que executa uma atividade de notebook Databricks. A atividade de notebook passa parametros (por exemplo, data de processamento), o notebook processa dados e grava resultados no data lake. Implementei esse padrao em varios projetos e conheco os detalhes de configuracao: servicos vinculados, integration runtime Databricks, referencias de segredos para credenciais e tratamento adequado de erros na pipeline.

Azure Synapse Analytics: notebooks Spark e dataflows

O Azure Synapse Analytics combina SQL Pool, Spark Pool e funcoes de integracao de dados em uma unica plataforma. Os notebooks Synapse Spark sao essencialmente notebooks PySpark executados diretamente do Synapse. Os Synapse Dataflows sao uma alternativa visual para tarefas de transformacao mais simples que nao requerem logica Python. Em projetos utilizei Synapse Dataflows para padroes ELT padronizados e notebooks Python para logica de transformacao mais complexa que nao pode ser expressa em dataflows.

Stack Python em engenharia de dados: fontes, ferramentas e saida

Stack Python completo: SQL Server, APIs REST e arquivos planos como fontes; pyodbc/SQLAlchemy, pandas/NumPy e PySpark/Databricks como camada de transformacao; Parquet/Delta Lake, Azure Synapse e Jupyter notebooks como saida.

Azure nao e apenas infraestrutura -- e o ecossistema no qual as pipelines modernas de dados Python vivem. Quem pode combinar Python e servicos Azure pode construir plataformas de dados completas e prontas para producao que escalam, sao seguras e se encaixam perfeitamente na infraestrutura Microsoft existente.

Automacao com Python

Alem do seu papel como linguagem de transformacao e analise, Python e tambem uma poderosa ferramenta de automacao. No contexto de engenharia de dados isso significa: executar scripts de extracao como jobs agendados, automatizar operacoes de sistema de arquivos, enviar notificacoes por email em erros, popular automaticamente relatorios Excel e carregar configuracoes centralmente de variaveis de ambiente ou Key Vault. Comparado ao PowerShell, Python e mais adequado para tarefas centradas em dados, enquanto PowerShell e mais forte para administracao de servidores Windows e integracao com dbatools. Em projetos utilizo ambos dependendo da tarefa.

Execucao agendada: cron, Agendador de Tarefas Windows e ADF

Um script de extracao Python pode ser agendado de tres formas: como job cron em servidores Linux (tipico em ambientes de VM Azure ou container), como tarefa do Agendador de Tarefas Windows em servidores Windows, ou como atividade de pipeline Azure Data Factory com um gatilho. Para pipelines de producao prefiro a rota ADF porque fornece logica de nova tentativa, monitoramento e alertas dentro do framework do Azure Monitor. Para automacao local simples, o Agendador de Tarefas e suficiente.

Tratamento de erros, logging e alertas

Em uma pipeline de producao, o tratamento de erros nao e opcional -- e obrigatorio. Utilizo o modulo logging do Python com um handler configuravel que grava logs tanto em um arquivo quanto no Azure Application Insights. Em erros criticos, uma notificacao e enviada via modulo smtplib ou um endpoint Azure Logic App. Todas as excecoes nao tratadas sao capturadas, registradas e persistidas em uma tabela de erros no banco de dados para analise posterior e alertas.

Configuracao: variaveis de ambiente e Key Vault

Credenciais hardcoded em codigo sao inaceitaveis em sistemas de producao. Carrego strings de conexao, senhas e segredos de principal de servico seja de variaveis de ambiente (os.environ) ou diretamente do Azure Key Vault via biblioteca azure-keyvault-secrets. Para notebooks Databricks utilizo o gerenciamento de Secrets embutido (dbutils.secrets.get()), que carrega segredos do escopo Key Vault configurado sem que credenciais aparecam no codigo do notebook.

  • modulo logging: saida de log estruturada, nivel e handlers configuraveis
  • try/except/finally: tratamento limpo de erros em todos os estagios da pipeline
  • os.environ / python-dotenv: variaveis de ambiente para desenvolvimento local
  • azure-keyvault-secrets: gerenciamento seguro de credenciais em producao
  • openpyxl: popular e formatar relatorios Excel automaticamente
  • smtplib / Azure Logic Apps: alertas em falhas de pipeline
  • argparse: parametrizacao de scripts batch via linha de comando
  • schedule / APScheduler: agendamento simples de jobs similar a cron em Python
A automacao com Python torna as pipelines de dados reproduziveis, manteniveis e monitoraveis. Investir em tratamento limpo de erros, parametros configuraveis e logging estruturado desde o inicio compensa em operacoes de producao em comparacao com scripts escritos apressadamente sem essa base.

Abordagem e Colaboracao

A entrada em um projeto Python de engenharia de dados sempre comeca com uma avaliacao: quais sistemas fonte existem? Que volumes e qualidade de dados podem ser esperados? Quais servicos e permissoes Azure estao disponiveis? Quais ferramentas de BI e equipes consomem os dados a jusante? Essas perguntas determinam as decisoes arquiteturais: se pandas ou PySpark, se ADF ou Databricks Workflow, se Parquet ou Delta, se Synapse Dedicated Pool ou Serverless. Tomo essas decisoes em conjunto com o cliente, explico as implicacoes e documento a justificativa.

Na fase de desenvolvimento trabalho de forma iterativa: primeiras versoes de pipeline em Jupyter notebooks, testes exploratorios contra amostras representativas dos dados fonte, adicao incremental de logica de limpeza, validacao e tratamento de erros, depois portando para scripts prontos para producao ou notebooks Databricks. Cada passo e documentado -- no proprio notebook, em comentarios de codigo e em um documento de design tecnico separado para o cliente. Codigo Python limpo e comentado nao e um bonus para mim, mas parte do que e entregue.

  • Avaliacao: sistemas fonte, volumes de dados, qualidade, ambiente Azure
  • Arquitetura: selecao de ferramentas (pandas/PySpark), formato (Parquet/Delta), orquestracao (ADF/Databricks)
  • Desenvolvimento: iterativo, notebook-first, depois scripts prontos para producao
  • Validacao: testes de schema, assertions, Pandera em cada estagio da pipeline
  • Documentacao: comentarios inline, Markdown do notebook, documento de design tecnico
  • Entrega: transferencia de conhecimento, guia de operacoes, integracao de equipes internas

Trabalho remotamente, em modo hibrido e presencialmente. Para fases de desenvolvimento e teste, o modo remoto e suficiente na maioria dos casos. Para avaliacoes iniciais, decisoes arquiteturais fundamentais e entrega para equipes internas, a presenca pessoal frequentemente e mais valiosa. Sigo o que faz sentido para o projeto. As tres linguas do projeto -- alemao, ingles e portugues -- falo fluentemente, incluindo em discussoes tecnicas.

Uma pipeline de dados Python que apenas seu criador entende e pode manter e um risco operacional. Codigo comentado, decisoes arquiteturais documentadas e uma equipe interna integrada sao o objetivo -- nao dependencia do freelancer.

Servicos Tipicos

Meus servicos Python no contexto de engenharia de dados cobrem a cadeia de valor completa: desde a conectividade do sistema fonte passando por transformacao e validacao ate armazenamento em nuvem e orquestracao. Dependendo da fase do projeto e das necessidades, assumo areas individuais ou o espectro completo.

  • Construcao de pipelines ETL Python: SQL Server para pandas para Parquet/Delta no Azure
  • Implementacao de notebooks PySpark no Databricks para grandes volumes de dados
  • Analise exploratoria de dados e avaliacoes estatisticas em Jupyter notebooks
  • Validacao de dados: assertions pandas, schemas Pandera, evolucao de schema
  • Azure Data Factory: design de pipeline, atividades Databricks, gatilhos, monitoramento
  • Azure Synapse Analytics: notebooks Spark, dataflows, servicos vinculados
  • Azure Blob Storage / ADLS Gen2: datasets Parquet, tabelas Delta, permissoes
  • Delta Lake: logica upsert/MERGE, particionamento, Z-ordering, Time Travel
  • Tratamento de erros, logging, alertas: pipelines de producao estruturadas
  • Automacao de relatorios Excel com openpyxl para departamentos de negocios
  • Revisoes de codigo e consultoria de arquitetura para pipelines Python existentes
  • Transferencia de conhecimento e integracao de equipes internas em Python e Databricks

Cenarios tipicos de engajamento: uma empresa migra de SSIS para Databricks e precisa de suporte para construir as primeiras pipelines baseadas em Python. Uma equipe de Controladoria quer automatizar analises estatisticas do DWH e documenta-las como Jupyter notebooks reproduziveis. Uma equipe de TI construiu infraestrutura Databricks, mas precisa de suporte para escrever jobs PySpark eficientes e projetar uma estrategia de particionamento Delta Lake. Em todos esses cenarios trago tanto o contexto Python quanto o de SQL Server e Azure.

Uma vantagem particular surge quando habilidades Python e experiencia em SQL Server se combinam: conheco as peculiaridades dos dados fonte SQL Server, sei quais codificacoes NVARCHAR causam problemas em pyodbc, conheco tipos DateTime especificos do SQL Server e seus equivalentes pandas, e entendo como carregar eficientemente tabelas SQL Server com milhoes de linhas via particionamento JDBC no Spark. Essa combinacao economiza muitas horas de depuracao.

Projetos de referencia anonimizados selecionados

Prestador de Servicos Texteis

Python · pandas · Databricks · Parquet/Delta · Azure Synapse · ADF · Jupyter

Construcao de pipelines de extracao de fontes SQL Server como arquivos Parquet e Delta no Azure Blob Storage. Implementacao de notebooks PySpark no Databricks para processamento de grandes volumes de dados de sistemas de RH, financas e Controladoria. Analises estatisticas e analises exploratoria em Jupyter notebooks. Orquestracao via Synapse Dataflows e pipelines Azure Data Factory. Reducao dos custos de infraestrutura Azure por otimizacao Delta e estrategias de particionamento.

Setor Publico / Organizacao de Pesquisa

Python · pandas · ETL · SSIS · Data Vault · anonimizacao de dados pessoais

Suporte para desenvolvimento de DWH com pipelines ETL baseadas em Python ao lado de pacotes SSIS existentes. Implementacao de funcoes de anonimizacao para dados pessoais em Python. Jupyter notebooks para verificacoes de qualidade exploratoria da camada de ingestao Data Vault.

Consultoria / MDM

Python · Azure Data Factory · Key Vault · Azure SDKs

Implementacao de atividades Python em pipelines Azure Data Factory para logica de transformacao flexivel que nao podia ser expressa em dataflows ADF. Gerenciamento seguro de credenciais via Azure Key Vault em scripts Python. Integracao com sistema MDM para verificacoes automatizadas de qualidade de dados via cliente Python.

Fidelidade / Varejo / Compensacao

Python · pandas · APIs REST · Power BI · modelos de dados

Scripts Python para extracao e processamento de interfaces REST/oData cuja saida foi integrada em modelos de dados Power BI. Relatorios automatizados e verificacoes de qualidade de dados via pandas para processos de compensacao.

Perguntas frequentes sobre Python em engenharia de dados

Para que voce usa Python em engenharia de dados?

Uso Python para extracao de dados do SQL Server e outras fontes, para transformacao e limpeza com pandas, para analise exploratoria em Jupyter notebooks, para jobs PySpark no Databricks e para analises estatisticas. Python e o cimento entre sistemas fonte, plataformas de nuvem e ferramentas de BI.

pandas ou PySpark -- quando usar qual?

pandas e ideal para datasets que cabem na memoria (ate alguns GB) e para desenvolvimento e prototipagem. Uso PySpark quando os dados excedem a capacidade de uma unica maquina ou quando a infraestrutura ja e Databricks. Frequentemente desenvolvo em pandas e porto para PySpark para producao escalada.

Como voce conecta Python ao SQL Server?

Via pyodbc como wrapper direto do driver ODBC ou via SQLAlchemy como camada de abstracao. Para pandas read_sql() recomendo SQLAlchemy. Para Azure SQL com autenticacao Entra ID uso ODBC Driver 18 com Managed Identity ou Service Principal. No Databricks uso JDBC com particionamento paralelo.

O que e Delta Lake e por que voce o usa?

Delta Lake e uma camada de armazenamento de codigo aberto sobre Parquet que fornece transacoes ACID, logica upsert MERGE, imposicao de schema e Time Travel. Uso no Databricks como formato de tabela padrao porque e mais confiavel, manteniavel e eficiente do que arquivos Parquet simples.

Como voce integra Python com Azure Data Factory?

Como atividade de notebook Databricks invocada e parametrizada por uma pipeline ADF, ou como atividade Azure Batch para scripts Python. Credenciais sao carregadas de forma segura via Azure Key Vault. Monitoramento e logica de nova tentativa estao ancorados no framework de pipeline ADF.

Como voce garante qualidade de dados em pipelines Python?

Por meio de uma combinacao de assertions pandas (verificacoes basicas rapidas), validacao de schema Pandera (verificacoes declarativas de tipo e intervalo de valores) e logging estruturado. Erros sao detectados cedo apos a extracao e registrados no log e em uma tabela de erros no banco de dados.

Voce escreve codigo Python manteniavel e documentado?

Sim. Codigo comentado com docstrings explicativos, modulos estruturados e parametros configuraveis e meu padrao. Os Jupyter notebooks servem simultaneamente como codigo executavel e documentacao de analise. Meu objetivo e que equipes internas possam manter de forma independente apos o termino do meu engajamento.

Voce pode revisar e otimizar pipelines Python existentes?

Sim. Revisoes de codigo para scripts ETL Python existentes e notebooks Databricks fazem parte dos meus servicos. Oportunidades tipicas de otimizacao: operacoes pandas ineficientes (apply em vez de metodos vetorizados), validacao ausente, credenciais hardcoded, tratamento de erros ausente e estrategias ruins de particionamento Parquet/Delta.

Em quais linguas podemos trabalhar juntos?

Alemao, ingles e portugues -- fluentemente, incluindo em discussoes tecnicas sobre arquitetura de banco de dados, revisoes de codigo Python e reunioes de status de projeto.

Contato

Solicitação de projeto

Precisa de apoio em ETL, Data Vault, arquitetura de BI, SQL Server ou Azure?

Remoto · Híbrido · Alemanha · UE · Brasil · Meio período · Tempo integral