Capture campos não conformes com a coluna de recuperação do Zerobus
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-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 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:
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 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
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.