Zerobus レスキューカラムで適合しないフィールドをキャプチャ。
ベータ版
レスキュー列はBetaです。現在、JSON形式での取り込みのみがサポートされています。
By default, Zerobus Ingest は、ターゲットテーブルのスキーマに適合しないフィールドを含むレコードを拒否します。レスキューカラム機能により、適合しないフィールドを失うことなくキャプチャできます。スキーマに適合しないフィールドは、JSON オブジェクトにグループ化され、指定されたレスキューカラムに VARIANT タイプとして保存されます。
レスキュー列を構成する
列をレスキュー列として指定するには、その列は次の要件を満たす必要があります。
- null値を許可します。
VARIANTタイプを使用します。- Unity Catalog で
zerobus-rescueタグが適用されていること。
厳密に1つの列がこれら3つの基準すべてを満たす必要があります。Zerobus はその他のケースを次のとおり処理します:
- 3つの条件をすべて満たす列はありません :レスキュー列機能は非アクティブであり、Zerobusはこの機能がない場合と同様に不適合なフィールドを拒否します。
- **複数の列が3つの条件すべてを満たしています**: Zerobusが任意に1つを選択します。あいまいさを避けるため、1つの列のみが適格であることを確認してください。
列のタグ付けへの変更が反映されるまでに最大5分かかる場合があります。
Zerobusがレスキューカラムに書き込むとき
Zerobus は、次のいずれかが発生した場合にレスキュー列にフィールドを書き込みます:
- レコードには、テーブルスキーマに存在しないフィールドが含まれています。
- レコードにはテーブルスキーマに存在するフィールドが含まれていますが、値のタイプが一致せず、ターゲットカラムはnull許容です。
スキーマに準拠するフィールドは、それぞれの列に正常に書き込まれます。不適合なフィールドのみがレスキュー列に移動します。
例:型の不一致と余分なフィールド
次の例は、タイプミスと余分なフィールドの両方がrescue列にルーティングされることを示しています。次のスキーマを持つテーブルを考えます。ここで、rescueはNULLを許容し、VARIANTタイプを使用し、Unity Catalogでzerobus-rescueタグが適用されています。
CREATE TABLE main.default.air_quality (
device_name STRING NOT NULL,
temp INT,
humidity LONG,
rescue VARIANT
);
「この例では、次のJSONレコードを取り込みます。」
{
"device_name": "sensor-1",
"temp": "72F",
"humidity": 87,
"extra_field": "some value"
}
このレコードは、ターゲットのDeltaテーブルに次の行を生成します。
|
|
|
|
|---|---|---|---|
|
|
|
|
各カラムの結果:
device_nameペイロード値が列のSTRINGタイプに一致するため、通常通り書き込まれます。tempペイロード値("72F"、文字列)がカラムのINTタイプと一致しないため、nullと記述されます。humidityペイロード値が列のタイプに一致するため、正常に書き込まれます。extra_fieldテーブルスキーマに含まれていないため、拒否される代わりにrescueに書き込まれます。
Zerobusは、非準拠フィールドであるtempとextra_fieldの両方をrescue列のJSONオブジェクトにグループ化します。
制限事項
レスキュー列機能には、次の制限が適用されます。
- 「レスキュー列は予約されているため、レコードペイロードはその列に明示的な非null値を提供できません。」「レコードが存在する場合、エラーで拒否されます。」「レスキュー列の
null値は許可され、無視されます。これは、不在のフィールドまたはnullフィールドと同じです。」 - JSON ペイロードで
nullに設定されたフィールドは、存在しないフィールドと同じように扱われ、レスキュー列には書き込まれません。 - ペイロードに同じキーの複数のエントリが含まれている場合、標準のJSON解析規則に従い、最後の値が優先されます。