ai_parse_document(): transforme PDF em tabela governada com uma única instrução SQL
Como o ai_parse_document() do Databricks colapsa OCR, parsing e reconstrução de tabelas em uma única instrução SQL — entregando o resultado como tabela governada no Unity Catalog.
Extrair dados de documentos sempre foi uma das partes mais ingratas da engenharia de dados. Notas fiscais em PDF, contratos em DOCX, relatórios com tabelas dentro de tabelas, imagens escaneadas. O caminho tradicional junta um serviço de OCR, uma biblioteca de layout em Python, um passo separado para reconstruir tabelas e uma boa dose de código de cola para amarrar tudo. Cada peça é um ponto de falha, e qualquer mudança no formato do documento derruba o pipeline.
O ai_parse_document() do Databricks propõe outra abordagem: colapsar esse fluxo inteiro em uma única instrução SQL declarativa, com o resultado já pousando como tabela governada no Unity Catalog.
O que a função faz
ai_parse_document() recebe o conteúdo binário de um documento e devolve sua estrutura em formato semiestruturado (VARIANT). Ela lê PDF, JPG, PNG, DOCX e PPTX e entrega:
- Texto com a ordem de leitura preservada;
- Tabelas exatamente como aparecem, incluindo células mescladas e estruturas aninhadas;
- Figuras e diagramas descritos automaticamente com legendas geradas por IA;
- Metadados espaciais e bounding boxes, úteis para citação, auditoria e validação humana.
Tudo isso sem provisionar um único servidor de OCR ou escrever parser algum.
O passo a passo
1. Leia os arquivos do Volume
Coloque os documentos em um Volume do Unity Catalog e leia-os como binário com READ_FILES:
SELECT path,
ai_parse_document(content) AS doc
FROM READ_FILES(
'/Volumes/main/raw/docs',
format => 'binaryFile'
);
Em uma chamada, cada documento vira uma linha com a coluna doc contendo a estrutura completa.
2. Materialize o resultado
Grave a saída em uma tabela Delta para consultar e reprocessar sem repetir o parsing:
CREATE TABLE main.silver.docs_parsed AS
SELECT path,
ai_parse_document(content) AS doc
FROM READ_FILES('/Volumes/main/raw/docs',
format => 'binaryFile');
3. Navegue pela estrutura
Como doc é um VARIANT, você acessa os campos com a notação de caminho e extrai só o que precisa — por exemplo, o texto de cada página ou as tabelas detectadas:
SELECT path,
doc:document:pages AS pages,
doc:document:elements AS elements
FROM main.silver.docs_parsed;
A partir daí é SQL comum: explode das páginas, filtros por tipo de elemento, joins com suas dimensões. O conteúdo extraído alimenta diretamente RAG, Agent Bricks e AI/BI, porque já está no lakehouse.
Por que isso importa para engenharia de dados
Menos peças móveis. Um SELECT substitui um pipeline dedicado de parsing. Menos código, menos dependências, menos plantão.
Incremental de fábrica. Integrado às Spark Declarative Pipelines, o processamento é incremental: documentos novos que chegam ao Volume entram sozinhos, sem reprocessar o histórico.
Governança de verdade. O resultado é uma tabela do Unity Catalog como qualquer outra — com permissões, linhagem de ponta a ponta e auditoria no mesmo lugar do resto dos seus dados. Nada de dados sensíveis vazando para um serviço externo sem rastro.
Custo competitivo. A Databricks posiciona o sistema com qualidade comparável às melhores ofertas do mercado a um custo de 3 a 5 vezes menor — relevante quando o volume de documentos escala.
Quando (e quando não) usar
É uma escolha natural quando os documentos já vivem, ou podem viver, num Volume do Unity Catalog e o destino é o próprio lakehouse: extração de notas fiscais, contratos, relatórios regulatórios e bases para chatbots corporativos.
Fique atento aos limites atuais: máximo de 500 páginas e 100 MB por documento — acima disso, a função retorna erro. Para documentos muito grandes, quebre em partes antes de processar. E, como toda extração assistida por IA, mantenha uma etapa de validação para os casos de maior risco: os bounding boxes existem justamente para isso.
Conclusão
ai_parse_document() move a extração de documentos de "projeto de integração" para "mais uma linha de SQL". Para times de dados, isso significa entregar dados de documentos com a mesma governança, linhagem e simplicidade de qualquer tabela do lakehouse — e liberar tempo que antes ia embora mantendo pipelines de parsing frágeis.
Se você trabalha com Databricks, vale um teste rápido com um Volume de amostra ainda esta semana.
Artigos relacionados
Expectations no Lakeflow: qualidade de dados como código, governada no Unity Catalog
Como declarar regras de qualidade ao lado da transformação, escolher entre registrar, descartar ou falhar, e governar tudo pelo Unity Catalog com regras versionadas e auditáveis.
Ler artigoCarga incremental no Azure Data Factory: o padrão de watermark passo a passo
Como fazer carga incremental no Azure Data Factory usando o padrão de watermark: Lookup do último valor, Copy Data só da janela nova e Stored Procedure que atualiza o controle. Guia prático.
Ler artigoGostou? Veja os e-books para conteúdo aprofundado.
E-books