メインコンテンツまでスキップ

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タグが適用されています。

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

「この例では、次のJSONレコードを取り込みます。」

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

このレコードは、ターゲットのDeltaテーブルに次の行を生成します。

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"}

各カラムの結果:

  • device_name ペイロード値が列のSTRINGタイプに一致するため、通常通り書き込まれます。
  • temp ペイロード値("72F"、文字列)がカラムのINTタイプと一致しないため、nullと記述されます。
  • humidity ペイロード値が列のタイプに一致するため、正常に書き込まれます。
  • extra_field テーブルスキーマに含まれていないため、拒否される代わりにrescueに書き込まれます。

Zerobusは、非準拠フィールドであるtempextra_fieldの両方をrescue列のJSONオブジェクトにグループ化します。

制限事項

レスキュー列機能には、次の制限が適用されます。

  • 「レスキュー列は予約されているため、レコードペイロードはその列に明示的な非null値を提供できません。」「レコードが存在する場合、エラーで拒否されます。」「レスキュー列のnull値は許可され、無視されます。これは、不在のフィールドまたはnullフィールドと同じです。」
  • JSON ペイロードでnullに設定されたフィールドは、存在しないフィールドと同じように扱われ、レスキュー列には書き込まれません。
  • ペイロードに同じキーの複数のエントリが含まれている場合、標準のJSON解析規則に従い、最後の値が優先されます。