O que beam faz?
Guia completo para desenvolver corretamente novos conectores I/O do Apache Beam, incluindo transformações I/O principais, SchemaTransforms, definições de proto URN, integração com Managed API, serviço de expansão entre linguagens e teste.
Introdução
O Apache Beam oferece um modelo unificado para processamento de dados em lote e streaming. Para interagir com fontes e destinos de dados externos, é necessário desenvolver conectores I/O. Este guia detalha as práticas recomendadas para criar conectores robustos e reutilizáveis.
Estrutura do Guia
1. Transformações I/O Principais
As transformações I/O principais (ReadFrom e WriteTo) são implementadas como extensões de PTransform. Elas encapsulam toda a lógica de leitura e escrita, incluindo configuração de esquemas e manipulação de dados.
2. SchemaTransforms
SchemaTransform é uma abstração que permite expor conectores de forma padronizada. Cada conector deve definir um SchemaTransformProvider que descreve os parâmetros de configuração e como construir a transformação.
3. Definições Proto URN
Cada transformação I/O deve ser identificada por uma URN (Uniform Resource Name) única, definida em arquivos proto. Isso permite a descoberta e a utilização de conectores em diferentes SDKs.
4. Integração com Managed API
A API Managed simplifica a configuração de conectores através de uma interface unificada. Ela lida com a resolução de parâmetros e a criação automática de pipelines.
5. Serviço de Expansão Entre Linguagens
O serviço de expansão entre linguagens permite que conectores escritos em Java sejam usados a partir de outros SDKs (Python, Go, etc.) através de comunicação gRPC.
6. Testes
Os testes são essenciais para garantir a qualidade. Incluem:
- Testes unitários: verificam a lógica individual das transformações.
- Testes de integração: validam a interação com sistemas reais (ex: banco de dados).
- Testes de expansão: asseguram que o serviço de expansão funcione corretamente entre linguagens.
Exemplo Prático
// Exemplo mínimo de uma transformação ReadFrom
public class ReadFromMySource extends PTransform<PBegin, PCollection<MyRecord>> {
@Override
public PCollection<MyRecord> expand(PBegin input) {
return input.apply("ReadFromMySource", ParDo.of(new DoFn<...>() {
@ProcessElement
public void processElement(ProcessContext c) {
// Lógica de leitura
}
}));
}
}