Pular para o conteúdo principal

Capture campos não conformes com a coluna de recuperação do Zerobus

info

Beta

A coluna de resgate está em Beta. Atualmente, é compatível apenas para ingestão no formato JSON.

Por default, o Zerobus Ingest rejeita qualquer registro que contenha campos que não correspondem ao esquema da tabela de destino. O recurso de coluna de resgate permite que você capture esses campos não conformes em vez de perdê-los. 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.

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-rescue aplicada 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 grava um campo na coluna de resgate quando uma das seguintes situações ocorre:

  • O registro contém um campo que não está presente no esquema da tabela.
  • O registro contém um campo presente no esquema da tabela, mas o tipo do valor não corresponde e a coluna de destino é anulável.

Os campos que estão em conformidade com o esquema são gravados em suas respectivas colunas normalmente. Apenas campos não conformes vão para a coluna de resgate.

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:

SQL
CREATE TABLE main.default.air_quality (
device_name STRING NOT NULL,
temp INT,
humidity LONG,
rescue VARIANT
);

Este exemplo ingere o seguinte registro JSON:

JSON
{
"device_name": "sensor-1",
"temp": "72F",
"humidity": 87,
"extra_field": "some value"
}

O registro produz a seguinte linha na tabela Delta de destino:

device_name

temp

humidity

rescue

sensor-1

null

87

{"extra_field": "some value", "temp": "72F"}

device_name

temp

humidity

rescue

sensor-1

null

87

{"extra_field": "some value", "temp": "72F"}

Resultado de cada coluna:

  • device_name é escrito normalmente porque o valor do payload corresponde ao tipo STRING da coluna.
  • temp é escrito como null porque o valor do payload ("72F", uma string) não corresponde ao tipo INT da coluna.
  • humidity é gravado normalmente porque o valor do payload corresponde ao tipo da coluna.
  • extra_field não está no esquema da tabela, então é gravado em rescue em 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 recurso de 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 null para a coluna de resgate é permitido e ignorado, assim como qualquer campo ausente ou null.
  • Um campo definido como null no 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.