Como criar e usar Synapse Notebook para exploração de dados em Azure Synapse Analytics
Este tutorial mostra, passo a passo, como criar e usar um Synapse Notebook no Azure Synapse Analytics para ler ficheiros Parquet armazenados num Data Lake, explorar dados, aplicar transformações simples e gravar resultados. É uma abordagem prática para análise exploratória (EDA), validação de esquemas e preparação de dados para pipelines ou modelos de machine learning. Em cenários reais, um Notebook é muito útil para trabalhar interactivamente com datasets desde alguns megabytes até centenas de gigabytes.
Pré-requisitos
- Conta Azure com permissões para um workspace do Azure Synapse Analytics.
- Um Synapse Workspace configurado e um Spark Pool disponível (por exemplo, 3–8 nós dependendo do volume de dados).
- Ficheiros Parquet num contentor do Azure Data Lake Storage Gen2 (acesso via Linked Service, SAS ou managed identity).
- Noções básicas de PySpark e Python; experiência mínima com SQL é útil.
Sugestão prática: para datasets < 1 GB, um Spark Pool com 3 nós (cada um com ~8–16 GB) é suficiente; para 50–200 GB considere 8 nós com 32 GB cada. Estimar correctamente ajuda a evitar falhas por falta de memória ou custos desnecessários.
Passo 1: Abrir o Synapse Studio e criar um Notebook
Abra o Synapse Studio no portal Azure, clique em Develop e crie um novo Notebook. Escolha um nome descritivo, por exemplo Exploracao_Parquet. Associe o Notebook a um Spark Pool (na barra superior do Notebook escolha o pool). Se estiver a testar, use um pool small; para produção, prefira pools cujos nós tenham pelo menos 16–32 GB de RAM por nó.
Boas práticas: ao trabalhar com ficheiros grandes, ligue o cluster apenas quando necessário e desligue-o fora do período de trabalho para controlar custos. Utilize notas no próprio Notebook para descrever cada passo e os parâmetros usados.
Passo 2: Configurar acesso ao Data Lake
Verifique como vai aceder ao storage: Linked Service (recomendado para produção), SAS token (útil para testes rápidos) ou managed identity (mais seguro quando configurado). No Notebook pode montar directamente o caminho ABFSS ou usar as APIs az storage. Se o Workspace tiver acesso configurado, use ABFSS para evitar a partilha de chaves.
# Path para o ficheiro Parquet
path = "abfss://container@storageaccount.dfs.core.windows.net/pasta/exemplo.parquet"
Exemplo: se o seu contentor tiver 12 ficheiros Parquet de 1 GB cada, o caminho pode apontar para a pasta (p.ex. /pasta/*.parquet) para ler todos de uma só vez.
Passo 3: Ler o ficheiro Parquet com PySpark
Use a sessão Spark disponível no Notebook para ler o Parquet num DataFrame. Isto permite inspecionar o esquema, contar registos rapidamente e medir tempos de leitura.
# Ler ficheiro Parquet
df = spark.read.parquet(path)
# Ver schema e primeiras linhas
df.printSchema()
df.show(10)
Indicador útil: depois de ler, execute df.count() (apenas para pequenos datasets) ou use df.rdd.getNumPartitions() para ver a partição inicial. Uma leitura de 10 milhões de linhas pode demorar alguns segundos a minutos, dependendo da rede e do número de partições.
Passo 4: Explorar e limpar os dados (exemplo prático)
Explore estatísticas, valores nulos e aplique transformações. Aqui mostramos como obter estatísticas, contar nulos por coluna e fazer uma limpeza simples: preencher nulos e criar uma coluna derivada com o ano do timestamp.
# Estatísticas básicas
from pyspark.sql.functions import col, when
df.describe().show()
# Contar valores nulos por coluna
nulls = {c: df.filter(col(c).isNull()).count() for c in df.columns}
print(nulls)
# Exemplo de limpeza: preencher nulos e criar coluna derivada
df2 = df.fillna({ 'payment_amount': 0 })
df2 = df2.withColumn('year', df2['event_timestamp'].cast('timestamp').substr(1,4))
df2.select('payment_amount','year').show(10)
Dica de performance: se for reutilizar df2 em várias operações, faça df2.cache() para evitar releituras. Para workloads de escrita, use df2.repartition(10) ou outro número baseado no número de ficheiros de saída desejados. Por exemplo, para gerar ~10 ficheiros de saída para 100 GB, use repartition(10) para distribuir ~10 GB por ficheiro.
Passo 5: Gravar resultados como Parquet ou tabelas temporárias
Depois de transformar os dados pode gravar o resultado de volta no Data Lake como Parquet (compacto e eficiente) ou registar uma temp view para consultas SQL interactivas no mesmo Notebook.
# Gravar como Parquet num caminho de saída
output_path = "abfss://container@storageaccount.dfs.core.windows.net/pasta/out/resultado.parquet"
df2.write.mode('overwrite').parquet(output_path)
# Criar uma view temporária para usar Spark SQL
df2.createOrReplaceTempView('vw_exploracao')
# Exemplo de query SQL
spark.sql("SELECT year, AVG(payment_amount) as avg_pay FROM vw_exploracao GROUP BY year").show()
Verifique o número de ficheiros escritos e o tamanho médio — se surgirem muitos ficheiros pequenos, considere coalescer antes de escrever: df2.coalesce(10).write(...).
Verificar o resultado
Confirme que o ficheiro de saída existe no Data Lake (via Azure Portal ou Storage Explorer) e valide o esquema. No Notebook use spark.read.parquet(output_path).show() para uma inspeção rápida. Se faltarem permissões verá erros de acesso (403) — verifique a Linked Service ou a managed identity. Se os dados tiverem tipos inesperados, reveja as transformações e pontos de verificação.
Conclusão
Agora tem um Synapse Notebook que lê Parquet, explora, limpa e grava resultados usando Spark. Próximos passos práticos: automatizar este Notebook com um Pipeline no Synapse, parametrizar caminhos (por exemplo, passados como widgets) e optimizar o Spark Pool consoante a carga. Comece sempre com small datasets para validar a lógica e só depois escale para volumes maiores — tipicamente testar com 1–10% do dataset final dá uma boa ideia de performance. Quer ver um exemplo de parametrização do Notebook ou de agendamento com Pipeline?