オープン ミラーリングのランディング ゾーンの要件と形式
この記事では、Microsoft Fabric のオープン ミラーリングにおけるランディング ゾーンとテーブル/列の操作の要件について詳しく説明します。
重要
この機能はプレビュー中です。
Fabric ワークスペース内で Fabric ポータルまたはパブリック API を使用してオープン ミラーリングされたデータベースを作成すると、ミラー化されたデータベース項目の [ホーム] ページに、OneLake 内のランディング ゾーン URL が表示されます。 このランディング ゾーンは、アプリケーションでメタデータ ファイルを作成し、データを Parquet 形式 (非圧縮、Snappy、GZIP、ZSTD) でランディングする場所です。
ランディング ゾーン
ミラー化されたデータベースごとに、OneLake 内にメタデータと Delta のテーブル用の一意の保存場所があります。 オープン ミラーリングには、アプリケーションでメタデータ ファイルを作成して OneLake にデータをプッシュするためのランディング ゾーン フォルダーが用意されています。 ミラーリングでは、ランディング ゾーン内のこれらのファイルを監視し、フォルダーを読み取って新しいテーブルとデータが追加されたかどうかを確認します。
たとえば、ランディング ゾーンに作成するテーブル (Table A
、Table B
、Table C
) がある場合、次の URL のようなフォルダーを作成します。
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/TableA
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/TableB
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/TableC
ランディング ゾーン内のメタデータ ファイル
すべてのテーブルのフォルダーには、_metadata.json
ファイルが含まれている必要があります。
このテーブル メタデータ ファイルには、現在、keyColumns
として一意のキー列のみを指定する JSON レコードが含まれています。
たとえば、列 C1
と C2
をテーブルの複合一意キーとして宣言するには、次のようにします。
{
"keyColumns" : ["C1", "C2"]
}
keyColumns
と _metadata.json
のいずれも指定されていない場合、更新/削除はできません。 このファイルはいつでも追加できますが、いったん追加すると、keyColumns
は変更できません。
ランディング ゾーンのデータ ファイルと形式
オープン ミラーリングでは、圧縮の有無に関係なく、ランディング ゾーン ファイル形式として Parquet をサポートします。 サポートされている圧縮形式として、Snappy、GZIP、ZSTD があります。
ランディング ゾーンに書き込まれるすべての Parquet ファイルは、次の形式になります。
<RowMarker><DataColumns>
RowMarker
: 列名は__rowMarker__
です (rowMarker
の前後に 2 つのアンダースコアを含む)。RowMaker
の値:- INSERT の場合は
0
- UPDATE の場合は
1
- DELETE の場合は
2
- UPSERT の場合は
4
- INSERT の場合は
行の順序: ファイル内のすべてのログは、トランザクションに適用される自然な順序になっている必要があります。 これは、同じ行を複数回更新する場合に重要です。 オープン ミラーリングでは、ファイル内の順序を使用して変更を適用します。
ファイルの順序: ファイルは単調に増加する番号で追加する必要があります。
ファイル名: ファイル名は 20 桁であり、最初のファイルは
00000000000000000001.parquet
、2 番目は00000000000000000002.parquet
などとなります。 ファイル名は連続する数字にする必要があります。 ファイルはミラーリング サービスによって自動的に削除されますが、最後のファイルは残され、パブリッシャー システムがそれを参照して次のファイルを順番に追加できるようにします。
初期読み込み
オープン ミラーリングされたデータベースへのデータの初期読み込みでは、すべての行に行マーカーとして INSERT が必要です。 ファイルに RowMarker
データがない場合、ミラーリングでファイル全体が INSERT として扱われます。
増分変更
オープン ミラーリングでは、増分変更を順番に読み取ってターゲットの Delta テーブルに適用します。 順序は、変更ログ内およびファイルの順序において暗黙的です。
更新された行には、すべての列を含む行データ全体が含まれている必要があります。
次に、EmployeeID
E0001 の EmployeeLocation
を Redmond から Bellevue に変更するための行履歴のサンプル Parquet データを示します。 このシナリオでは、EmployeeID
列がランディング ゾーンのメタデータ ファイルでキー列としてマークされています。
__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Redmond
0,E0002,Redmond
0,E0003,Redmond
1,E0001,Bellevue
キー列が更新されると、前のキー列の DELETE と、新しいキーとデータを含む INSERT 行によってそれが示されます。 たとえば、EmployeeID
E0001 の RowMarker
一意識別子を E0002 に変更する行履歴です。 DELETE 行のすべての列データを指定する必要はなく、キー列のみを指定します。
__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Bellevue
2,E0001,NULL
0,E0002,Bellevue
テーブル操作
オープン ミラーリングでは、テーブルの追加、削除、名前の変更などのテーブル操作をサポートします。
テーブルの追加
オープン ミラーリングでは、アプリケーションによってランディング ゾーンに追加されたテーブルを取得します。 オープン ミラーリングではすべての反復で新しいテーブルを確認します。
テーブルの削除
オープン ミラーリングではフォルダー名を追跡します。 テーブル フォルダーが削除されると、オープン ミラーリングではミラー化されたデータベース内のそのテーブルを削除します。
フォルダーが再作成されると、オープン ミラーリングではテーブルを削除し、新しいデータを使用してフォルダー内にそれを再作成します。これは、フォルダーの ETag を追跡して実現します。
テーブルを削除しようとするときにフォルダーの削除を試みることができますが、オープン ミラーリングでフォルダーのデータが引き続き使用されていて、パブリッシャーの削除エラーが発生する場合があります。
テーブルの名前変更
テーブルの名前を変更するには、初期および増分のデータを使用してフォルダーを削除して再作成します。 名前が変更されたテーブルにはデータを再入力する必要があります。
[スキーマ]
テーブル パスはスキーマ フォルダー内で指定できます。 スキーマ ランディング ゾーンには <schemaname>.schema
というフォルダー名が必要です。 スキーマは複数ある場合があり、1 つのスキーマ内に複数のテーブルが存在することがあります。
たとえば、ランディング ゾーンにスキーマ (Schema1
、Schema2
) とテーブル (Table A
、Table B
、Table C
) を作成する場合、OneLake に次のパスのようなフォルダーを作成します。
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/Schema1.schema/TableA
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/Schema1.schema/TableB
https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/LandingZone/Schema2.schema/TableC
テーブルの列と列の操作
列の型
- ランディング ゾーンでは、単純な Parquet 型がサポートされています。
- 複合型は JSON 文字列として記述する必要があります。
- 地理、画像などのバイナリ複合型は、ランディング ゾーンにバイナリ型として保存できます。
列を追加します
Parquet ファイルに新しい列が追加されると、オープン ミラーリングではそれらの列を Delta テーブルに追加します。
列の削除
新しいログ ファイルから列が削除されると、オープン ミラーリングでは新しい行でそれらの列に対して NULL
を保存し、古い行ではそれらの列がデータに存在します。 列を削除するには、テーブルを削除し、ランディング ゾーンにテーブル フォルダーをもう一度作成します。その結果、新しいスキーマとデータを含む Delta テーブルが再作成されます。
オープン ミラーリングでは常に、前のバージョンの追加データのすべての列を結合します。 列を削除するには、テーブル/フォルダーを再作成します。
列のタイプの変更
列タイプを変更するには、初期および増分のデータを含むフォルダーを削除して、新しい列タイプを使用して再作成します。 テーブルを再作成せずに新しい列タイプを指定するとエラーが発生し、そのテーブルのレプリケーションは停止します。 テーブル フォルダーが再作成されると、新しいデータとスキーマを使用してレプリケーションが再開されます。
列の名前の変更
列の名前を変更するには、テーブル フォルダーを削除し、すべてのデータと新しい列名を使用してフォルダーを再作成します。