A camada Bronze copia dados de fontes externas para o Lakehouse sem transformar o schema ou o conteúdo. É a landing zone fiel da fonte.
Para uma implementação concreta, ver:
new_data)Usado quando a fonte deposita ficheiros num contentor blob e o pipeline é o único consumidor:
1. Autenticar → obter SAS Token do Key Vault
2. Listar blobs no contentor
3. Para cada blob:
a. Descarregar (streaming, sem carregar em memória)
b. Fazer upload para o Lakehouse em chunks de 4 MB
c. Apagar o blob na origem (só após upload confirmado)
4. Retornar { files_copied: [...] }
Propriedade chave: se o upload falhar, o blob NÃO é apagado e fica disponível para reprocessamento na próxima execução.
Usado quando a fonte expõe uma API REST e o pipeline vai buscar os dados activamente:
1. Descobrir o catálogo de dados disponíveis (endpoint de metadata)
2. Para cada item do catálogo:
a. Fazer GET ao endpoint de dados
b. Parsear a resposta (CSV, JSON, etc.)
c. Escrever em tabela Delta no Lakehouse Bronze
3. Retornar { records_loaded: N }
Para ficheiros grandes, o upload é feito em chunks de 4 MB usando a ADLS Gen2 REST API:
PUT — cria o ficheiro vazio no destino (?resource=file)PATCH em loop — anexa chunks (?action=append&position=N)PATCH final — confirma a escrita (?action=flush&position=total)Autenticação: Bearer Token via mssparkutils.credentials.getToken("https://storage.azure.com/.default").
Este mecanismo está implementado na biblioteca dap_lake_file_tools.py (ver Bibliotecas).
O notebook bronze retorna sempre um JSON com o estado da execução:
{ "status": "OK", "files_copied": [ { "name": "ficheiro.csv", "created_on": "..." } ] }
Se files_copied estiver vazio, o runner regista new_data = False. O avanço para silver e gold fica dependente da flag run_withouth_new_data de cada grupo.
errorId |
Situação |
|---|---|
0 |
Sucesso |
10 |
Falha de autenticação ou acesso à fonte |
20 |
Falha durante a cópia ou eliminação de ficheiros |
Em produção (running_local = False), o notebook termina imediatamente com notebookutils.notebook.exit(json) em caso de erro.