Zerobus レスキュー列
ベータ版
レスキュー列は ベータ版であり、現在は JSON 形式での取り込みをサポートしています。ワークスペース管理者は、 プレビュー ページから Zerobus rescue column プレビューにオプトインすることで、この機能を有効にできます。Databricksのプレビューを管理するを参照してください。
defaultでは、Lakeflow Connect の Zerobus Ingest は、ターゲットテーブルのスキーマに一致しないフィールドを含むレコードを拒否します。レスキュー列機能を使用すると、それらの非準拠フィールドを失うことなくキャプチャできます。スキーマに適合しないフィールドは JSON オブジェクトにグループ化され、指定されたレスキュー列に VARIANT 型として格納されます。
レスキューカラムは現在、JSON形式の取り込みをサポートしています。Protocol Buffers (protobuf) または Apache Arrow を使用して取り込む場合は、準拠していないフィールドはレスキューされずに拒否されるため、レコードがテーブルに適合するようにスキーマを計画してください。
レスキュー列は、テーブルが受信データをどの程度厳密に検証するかを決定する 3 つの方法のうちの 1 つです。全体像については、「Three ways to shape the contract」を参照してください。
レスキュー列を構成する
列をレスキュー列として指定するには、その列は次の要件を満たす必要があります。
- null値を許可します。
VARIANTタイプを使用します。- Unity Catalog で
zerobus-rescueタグが適用されていること。
厳密に1つの列がこれら3つの基準すべてを満たす必要があります。Zerobus はその他のケースを次のとおり処理します:
- 3つの条件をすべて満たす列はありません :レスキュー列機能は非アクティブであり、Zerobusはこの機能がない場合と同様に不適合なフィールドを拒否します。
- **複数の列が3つの条件すべてを満たしています**: Zerobusが任意に1つを選択します。あいまいさを避けるため、1つの列のみが適格であることを確認してください。
列のタグ付けへの変更が反映されるまでに最大5分かかる場合があります。
Zerobusがレスキューカラムに書き込むとき
Zerobus Ingest は、レコード内の各フィールドをテーブルスキーマへの適合性に基づいてルーティングします:
レコード内のフィールド | 結果 |
|---|---|
テーブル内の列(名前と型)と一致します | その列に通常通り書き込まれます。 |
テーブルスキーマに存在しない | レスキュー列にキャプチャされます。 |
テーブルスキーマには存在しますが、値の型が一致しておらず、ターゲットカラムが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解析規則に従い、最後の値が優先されます。
関連
- スキーマ管理: Zerobus Ingest がテーブルスキーマに対してレコードを検証する方法。
- サポートされているデータ型:
VARIANTを含む、サポートされている Delta および Protobuf データ型。 - Zerobus Ingest の機能: その他の Zerobus Ingest の機能。