Como copiar e transformar JSON para Parquet em Azure Data Factory
Este tutorial mostra como copiar ficheiros JSON de um contentor do Azure Blob Storage para ficheiros Parquet num Data Lake usando o Azure Data Factory, com uma transformação leve para normalizar campos. Converter JSON para Parquet reduz custos e melhora o desempenho em análises.
Pré-requisitos
- Conta Azure com permissões para criar recursos
- Azure Data Factory já criada
- Azure Blob Storage com alguns ficheiros JSON de exemplo
- Azure Data Lake Storage Gen2 ou outro Blob destino para Parquet
Passo 1: Criar Linked Services para origem e destino
É preciso ligar o Azure Data Factory ao armazenamento de origem (Blob) e ao destino (ADLS Gen2 ou outro Blob). Use Managed Identity ou Service Principal para evitar credenciais hardcoded.
No portal do Azure Data Factory: Manage > Linked services > New.
// Exemplo JSON para criar Linked Service via ARM/REST (sintaxe simplificada)
{
"name": "LS_Blob_Storage",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=..."
}
}
}
Passo 2: Criar Datasets de origem JSON e destino Parquet
O Dataset de origem aponta para o contentor e o caminho com ficheiros JSON. O Dataset destino deve ter formato Parquet. Configure o esquema ou deixe o esquema ser inferido no Mapping Data Flow/Copy Activity.
// Dataset exemplo (simplificado)
{
"name": "DS_Json_Incoming",
"properties": {
"type": "AzureBlob",
"typeProperties": {
"format": { "type": "JsonFormat", "filePattern": "setOfObjects" },
"fileName": "*.json",
"folderPath": "input/json"
}
}
}
// Dataset destino Parquet (simplificado)
{
"name": "DS_Parquet_Output",
"properties": {
"type": "AzureBlob",
"typeProperties": {
"format": { "type": "ParquetFormat" },
"folderPath": "output/parquet"
}
}
}
Passo 3: Decidir Copy Activity vs Mapping Data Flow
Se precisa apenas da conversão do formato (JSON → Parquet) sem transformação de esquema complexa, use a Copy Activity para ser mais barato e simples. Para normalizar campos, desagregar arrays ou juntar estruturas complexas, use o Mapping Data Flow.
Passo 4: Exemplo com Copy Activity (conversão simples)
Crie um pipeline com uma atividade Copy. No Source, selecione o Dataset JSON e configure o file pattern; no Sink, selecione DS_Parquet_Output. Assinale "Enable schema drift" se tiveres esquemas variáveis.
// Copy Activity JSON->Parquet (pseudocódigo de pipeline)
{
"name": "CopyJsonToParquet",
"type": "Copy",
"inputs": [{ "referenceName": "DS_Json_Incoming" }],
"outputs": [{ "referenceName": "DS_Parquet_Output" }],
"typeProperties": {
"enableStaging": false
}
}
Passo 5: Exemplo com Mapping Data Flow (normalizar arrays)
Se os JSON contêm arrays que precisas de «explodir» para linhas, cria um Mapping Data Flow com Source (formato JSON), uma transformação Flatten/Unroll e depois um Sink para Parquet. Define o esquema no Sink para Parquet.
// Flow simplificado:
Source(JSON) -> Select(columns) -> Flatten(unrollBy: items) -> DerivedColumn(normalize campos) -> Sink(Parquet)
No Data Flow, configura a coluna que contém arrays em Unroll By. Usa Derived Column para combinar ou formatar campos (ex.: concatenar id + subid).
Passo 6: Executar e parametrizar para vários ficheiros
Para processar múltiplos ficheiros ou pastas, parametriza o Dataset (folderPath, fileName) e no pipeline passa o parâmetro. Usa ForEach se precisares de lógica por ficheiro.
// Exemplo de parâmetro no pipeline
pipeline.parameters.folder = 'input/json'
// Passa para o Dataset: @pipeline().parameters.folder
Verificar o resultado
Valida no destino: entra no contentor destino e confirma ficheiros .parquet gerados. Podes abrir um ficheiro Parquet com o Azure Storage Explorer ou usar o Azure Synapse/Databricks para ler. No ADF Monitor verifica a execução do pipeline e os logs de cópia para erros comuns (incompatibilidade de esquema, permissões, ficheiros corrompidos).
Conclusão
Converter JSON para Parquet em Azure Data Factory melhora o desempenho e reduz custos de armazenamento. Começa com a Copy Activity para cenários simples e usa o Mapping Data Flow para normalizações/arrays. Próximo passo: testar a leitura dos Parquet no Power BI ou no Azure Synapse para comprovar os ganhos. Dica: começa por um conjunto reduzido de ficheiros para validar esquemas antes de processar em massa — tens questões sobre arrays ou schema drift no teu JSON?