Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Ao ingerir com os SDKs Zerobus Ingest através de gRPC, escolhe como os registos são codificados num determinado fluxo. O Zerobus Ingest suporta três formatos de mensagem (JSON, Protocol Buffers (protobuf) e Apache Arrow), por isso pode trocar simplicidade, segurança de tipos e rendimento para a sua carga de trabalho. Cada formato é validado contra o esquema da tabela Delta antes de os dados se tornarem duráveis. Ver Gestão de esquemas.
Que formato deves usar?
| Format | Melhor para | Observações |
|---|---|---|
| JSON | Introdução e produtores básicos. | A opção mais simples, sem definição de esquema para compilar. Conveniente, mas mais lento do que os formatos binários para cargas de trabalho de alto volume. |
| Buffers de protocolo | Produção, fluxos baseados em linhas, de alto volume. | Codificação binária compacta com segurança de tipos. Recomendado para a maioria das cargas de trabalho em produção. Requer um esquema compilado. |
| Apache Arrow | Cargas de trabalho colunares ou orientadas por lotes. | Envia lotes de registos Apache Arrow diretamente, evitando serialização linha a linha. É melhor quando os teus dados já são colunares ou ingeres em lotes. Veja Usar Arrow Flight com Zerobus Ingest. |
Os excertos abaixo mostram a forma de cada formato no SDK Python. Eles assumem que já criaste o cliente SDK e conheces a tua tabela de destino. Para obter a configuração completa (endpoint, tabela, principal de serviço) e exemplos em todas as linguagens, consulte Use Zerobus Ingest.
JSON
JSON é a forma mais simples de começar: envias registos como objetos JSON sem definição de esquema para compilar. É ideal para começar rapidamente a trabalhar, criar protótipos e para produtores para quem a conveniência é mais importante do que o desempenho bruto. Para cargas de trabalho de produção de grande volume, um formato binário (protobuf ou Arrow) é mais eficiente.
Crie um fluxo para registos JSON passando um nome de tabela para TableProperties sem descritor:
table_properties = TableProperties(TABLE_NAME)
stream = sdk.create_stream(CLIENT_ID, CLIENT_SECRET, table_properties)
stream.ingest_record_offset({"device_name": "sensor-1", "temp": 22, "humidity": 55})
Para o guia completo em JSON, consulte Escrever um cliente.
Buffers de protocolo
O Protobuf fornece uma codificação binária compacta e segura para tipos, sendo o formato recomendado para a maioria das cargas de trabalho de produção orientadas a linhas. Defines um esquema protobuf que se ajusta à tua tabela Delta de destino (ver esquema Protobuf), compilas-no, e o SDK ingere registos registo a registo sobre gRPC.
Usar protobuf tem três passos: gerar um .proto esquema que corresponda à sua tabela, compilá-lo para um módulo de linguagem e depois ingerir registos passando o descritor para TableProperties. O exemplo seguinte utiliza o SDK Python.
1. Gerar um .proto esquema a partir da sua tabela. O SDK Python inclui uma generate_proto ferramenta que lê a sua tabela Delta e escreve um esquema correspondente:
python -m zerobus.tools.generate_proto \
--uc-endpoint "https://<workspace-id>.cloud.databricks.com" \
--client-id "<client-id>" \
--client-secret "<client-secret>" \
--table "main.default.air_quality" \
--output "record.proto" \
--proto-msg "AirQuality"
O esquema gerado utiliza proto2 sintaxe, com um campo opcional para cada coluna Delta:
syntax = "proto2";
message AirQuality {
optional string device_name = 1;
optional int32 temp = 2;
optional int64 humidity = 3;
}
2. Compilar o esquema para um módulo Python com o compilador protobuf:
pip install "grpcio-tools>=1.60.0,<2.0"
python -m grpc_tools.protoc --python_out=. --proto_path=. record.proto
Isto gera record_pb2.py.
3. Ingerir registos passando o descritor compilado para TableProperties (o padrão para protobuf). O SDK usa o descritor para serializar cada registo:
import record_pb2
descriptor_bytes = record_pb2.AirQuality.DESCRIPTOR.file.serialized_pb
table_properties = TableProperties(TABLE_NAME, descriptor_bytes)
stream = sdk.create_stream(CLIENT_ID, CLIENT_SECRET, table_properties)
record = record_pb2.AirQuality(device_name="sensor-1", temp=22, humidity=55)
stream.ingest_record_offset(record)
O exemplo acima usa o SDK Python. As ferramentas variam consoante a linguagem: alguns SDKs incluem um utilitário generate_proto que gera uma .proto a partir da sua tabela, enquanto outros (como Go e TypeScript) compilam um .proto existente. Para os passos para cada linguagem, consulte as notas sobre protobuf em cada separador do SDK de Write a client. Para fontes de ferramentas e exemplos completos, consulte o repositório Zerobus SDK.
Apache Arrow
A ingestão com Apache Arrow envia dados ArrowRecordBatch diretamente através da mesma ligação gRPC, em vez de converter primeiro cada linha em JSON ou protobuf. É a melhor escolha quando a sua aplicação já produz dados Arrow ou quando ingere linhas em lotes, especialmente para esquemas amplos, com muitos números ou orientados para análise, onde a serialização linha a linha adiciona sobrecarga.
O Arrow também é uma boa opção para lotes muito grandes. Ao contrário dos métodos JSON e protobuf batch, que são tudo ou nada e limitados pelo limite de tamanho por mensagem, o Arrow Flight Path divide um grande lote em mensagens de transporte mais pequenas que são enviadas e reconhecidas individualmente. Veja que os lotes Arrow Flight são a exceção e use o Arrow Flight com Zerobus Ingest.
Abra um fluxo Arrow com um pyarrow.Schema e importe dados RecordBatch:
stream = sdk.create_arrow_stream(TABLE_NAME, schema, CLIENT_ID, CLIENT_SECRET)
stream.ingest_batch(batch)
Para o guia completo do Arrow Flight, incluindo a definição do esquema, o processamento em lotes e a compressão, consulte Utilizar o Arrow Flight com o Zerobus Ingest.
Related
- Protocolos da API: Os protocolos através dos quais estes formatos são transmitidos.
- Gestão de esquemas: Como os registos são validados contra a sua tabela.
- Tipos de dados suportados: Tipos de dados Delta e Protobuf suportados.