Coluna de resgate do Zerobus
Beta
A coluna de resgate está em Beta e atualmente oferece suporte à ingestão no formato JSON. Os administradores do Workspace podem ativá-lo na página Pré-visualizações optando pela prévia da coluna de resgate Zerobus . Consulte Gerenciar prévias do Databricks.
Por default, o Zerobus Ingest no Lakeflow Connect rejeita qualquer registro que contenha campos que não correspondam ao esquema da tabela de destino. O recurso de coluna de resgate permite capturar esses campos não conformes em vez de perdê-los. Os campos que não se ajustam ao esquema são agrupados em um objeto JSON e armazenados em uma coluna de resgate designada como um tipo VARIANT.
A coluna de resgate atualmente oferece suporte à ingestão em formato JSON. Se você realizar a ingestão com Protocol Buffers (protobuf) ou Apache Arrow, planeje seu esquema para que os registros se ajustem à tabela, pois campos não conformes são rejeitados em vez de resgatados.
A coluna de resgate é uma das três maneiras de definir o quão rigorosamente sua tabela valida os dados recebidos. Para a imagem completa, consulte Três maneiras de definir o contrato.
Configure uma coluna de resgate
Para designar uma coluna como coluna de resgate, a coluna deve:
- Permitir valores nulos.
- Use o tipo
VARIANT. - Tenha a tag
zerobus-rescueaplicada no Unity Catalog.
Exatamente uma coluna deve atender a todos os três critérios. O Zerobus lida com os outros casos da seguinte forma:
- Nenhuma coluna atende a todos os três critérios : O recurso de coluna de resgate está inativo, e o Zerobus rejeita campos não conformes como faria sem o recurso.
- Múltiplas colunas atendem a todos os três critérios : O Zerobus seleciona uma arbitrariamente. Para evitar ambiguidade, verifique se apenas uma coluna se qualifica.
Alterações na marcação de coluna podem levar até 5 minutos para surtir efeito.
Quando o Zerobus grava na coluna de resgate
O Zerobus Ingest roteia cada campo em um registro com base em como ele se ajusta ao esquema da tabela:
Campo no registro | Resultado |
|---|---|
Corresponde a uma coluna na tabela (nome e tipo) | Gravado nessa coluna normalmente. |
Não presente no esquema da tabela | Capturado na coluna de dados resgatados. |
Presente no esquema da tabela, mas o tipo do valor não corresponde e a coluna de destino permite valores nulos | Capturado na coluna de dados resgatados. |
Apenas campos não conformes vão para a coluna de resgate. Os campos que estão em conformidade com o esquema são sempre gravados em suas próprias colunas.
Exemplo: incompatibilidade de tipo e campo extra
O exemplo a seguir mostra uma incompatibilidade de tipo e um campo extra, ambos roteados para a coluna rescue. Considere uma tabela com o seguinte esquema, onde rescue é anulável, usa o tipo VARIANT e tem a tag zerobus-rescue aplicada no Unity Catalog:
CREATE TABLE main.default.air_quality (
device_name STRING NOT NULL,
temp INT,
humidity LONG,
rescue VARIANT
);
Este exemplo ingere o seguinte registro JSON:
{
"device_name": "sensor-1",
"temp": "72F",
"humidity": 87,
"extra_field": "some value"
}
O registro produz a seguinte linha na tabela Delta de destino:
|
|
|
|
|---|---|---|---|
|
|
|
|
Resultado de cada coluna:
device_nameé escrito normalmente porque o valor do payload corresponde ao tipoSTRINGda coluna.tempé escrito comonullporque o valor do payload ("72F", uma string) não corresponde ao tipoINTda coluna.humidityé gravado normalmente porque o valor do payload corresponde ao tipo da coluna.extra_fieldnão está no esquema da tabela, então é gravado emrescueem vez de ser rejeitado.
O Zerobus agrupa ambos os campos não conformes, temp e extra_field, no objeto JSON da coluna rescue.
Limitações
As seguintes limitações se aplicam ao usar a coluna de resgate:
- A coluna de resgate é reservada, o que significa que o payload do registro não pode fornecer um valor explícito não nulo para ela. Se um registro o fizer, ele será rejeitado com um erro. Um valor
nullpara a coluna de resgate é permitido e ignorado, assim como qualquer campo ausente ounull. - Um campo definido como
nullno payload JSON é tratado da mesma forma que um campo ausente e não é gravado na coluna de resgate. - Se o payload contiver várias entradas para a mesma key, o último valor prevalece, seguindo a convenção de análise JSON padrão.
Relacionado
- Gerenciamento de esquema: como o Zerobus Ingest valida registros em relação ao esquema da sua tabela.
- Tipos de dados compatíveis: tipos de dados Delta e Protobuf compatíveis, incluindo
VARIANT. - Recursos do Zerobus Ingest: Outros recursos do Zerobus Ingest.