Microsoft OneLake では、Delta Lake と Apache Iceberg の両方の形式のテーブルをシームレスに操作できます。
この柔軟性は、 メタデータ仮想化によって実現されます。これは、Iceberg テーブルを Delta Lake テーブルとして解釈できる機能であり、その逆も可能です。 Iceberg テーブルを直接記述したり、そのテーブルへのショートカットを作成したりして、さまざまな Fabric ワークロードでこれらのテーブルにアクセスできるようにします。 同様に、Delta Lake 形式で記述された Fabric テーブルも Iceberg リーダーを使用して読み取ることができます。
Iceberg テーブル フォルダーへのショートカットを作成または作成すると、OneLake によってテーブルの仮想 Delta Lake メタデータ (Delta ログ) が自動的に生成され、Fabric ワークロードでの使用が可能になります。 逆に、Delta Lake テーブルに仮想 Iceberg メタデータが含まれるようになり、Iceberg リーダーとの互換性が可能になりました。
重要
この機能はプレビュー中です。
この記事には Snowflake で Iceberg テーブルを使用するためのガイダンスが含まれていますが、この機能は、Parquet 形式のデータ ファイルが格納されている Iceberg テーブルを操作することを目的としています。
Delta Lake テーブルを Iceberg として仮想化する
Delta Lake 形式から Iceberg 形式へのテーブルの自動変換と仮想化を設定するには、次の手順に従います。
ワークスペース設定で [Delta Lake から Apache Iceberg テーブル形式の仮想化を有効にする] という名前の委任された OneLake 設定を 有効にすることで、Delta Lake テーブルの Iceberg 形式への自動テーブル仮想化 を有効にします。
注
この設定は、現在プレビュー段階にある機能を制御します。 この設定は、この機能がすべてのユーザーに対して有効になっており、プレビューではなくなった場合に、今後の更新で削除されます。
Delta Lake テーブル、またはそのショートカットがデータ項目の
Tables
セクションにあることを確認します。 データ項目は、レイクハウスまたは別の Fabric データ項目である場合があります。ヒント
lakehouse がスキーマ対応の場合、テーブル ディレクトリは
dbo
などのスキーマ内に直接配置されます。 lakehouse がスキーマ対応でない場合、テーブル ディレクトリはTables
ディレクトリ内に直接存在します。Delta Lake テーブルが仮想 Iceberg 形式に正常に変換されたことを確認します。 これを行うには、テーブルの背後にあるディレクトリを調べます。
テーブルがレイクハウス内にある場合にディレクトリを表示するには、Fabric UI でテーブルを右クリックし、[ ファイルの表示] を選択します。
テーブルが別のデータ項目の種類 (ウェアハウス、データベース、ミラー化されたデータベースなど) にある場合は、Fabric UI ではなく Azure Storage Explorer や OneLake ファイル エクスプローラーなどのクライアントを使用して、テーブルの背後にあるファイルを表示する必要があります。
テーブル フォルダー内に
metadata
という名前のディレクトリが表示され、変換ログ ファイルを含む複数のファイルが含まれている必要があります。 Delta Lake から Iceberg への変換に関する詳細情報 (最新の変換のタイムスタンプやエラーの詳細など) を表示するには、変換ログ ファイルを開きます。変換ログ ファイルにテーブルが正常に変換されたことが示されている場合は、任意のサービス、アプリ、またはライブラリを使用して Iceberg テーブルを読み取ってください。
使用する Iceberg リーダーに応じて、テーブル ディレクトリへのパス、または
metadata
ディレクトリに表示される最新の.metadata.json
ファイルへのパスを知る必要があります。テーブルの最新のメタデータ ファイルへの HTTP パスを確認するには、バージョン番号が最も高い
*.metadata.json
ファイルの [プロパティ] ビューを開きます。 このパスに注意してください。データ項目の
Tables
フォルダーへのパスは次のようになります。https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828/Tables/
そのフォルダー内では、最新のメタデータ ファイルへの相対パスは
dbo/MyTable/metadata/321.metadata.json
のようになります。Snowflake を使用して仮想 Iceberg テーブルを読み取る場合は、 このガイドの手順に従います。
Iceberg テーブルへのテーブル ショートカットを作成する
OneLake ショートカットでサポートされているストレージの場所に Iceberg テーブルが既にある場合は、次の手順に従ってショートカットを作成し、Iceberg テーブルを Delta Lake 形式で表示するようにします。
Iceberg テーブルを見つけます。 Iceberg テーブルが格納されている場所 (Azure Data Lake Storage、OneLake、Amazon S3、Google Cloud Storage、S3 互換のストレージ サービスなど) を見つけます。
注
Snowflake を使用していて、Iceberg テーブルが格納されている場所がわからない場合は、次のステートメントを実行して Iceberg テーブルの格納場所を確認できます。
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('<table_name>');
このステートメントを実行すると、Iceberg テーブルのメタデータ ファイルへのパスが返されます。 このパスにより、どのストレージ アカウントに Iceberg テーブルが含まれているかが示されます。 たとえば、Azure Data Lake Storage に格納されている Iceberg テーブルのパスを見つけるための関連情報が次のものであるとします。
{"metadataLocation":"azure://<storage_account_path>/<path_within_storage>/<table_name>/metadata/00001-389700a2-977f-47a2-9f5f-7fd80a0d41b2.metadata.json","status":"success"}
Iceberg テーブル フォルダーには、
metadata
フォルダーが含まれている必要があります。このフォルダー自体には、.metadata.json
で終わるファイルが少なくとも 1 つ含まれています。Fabric のレイクハウスで、レイクハウスの [テーブル] 領域に新しいテーブル ショートカットを作成します。
ヒント
lakehouse の Tables フォルダーの下に dbo などのスキーマが表示される場合、lakehouse はスキーマ対応です。 この場合は、スキーマを右クリックし、スキーマの下にテーブル ショートカットを作成します。
ショートカットのターゲット パスには、Iceberg テーブル フォルダーを選択します。 Iceberg テーブル フォルダーには
metadata
フォルダーとdata
フォルダーが含まれています。ショートカットが作成されると、このテーブルがレイクハウスの Delta Lake テーブルとして自動的に反映され、Fabric 全体で使用できるようになります。
新しい Iceberg テーブルのショートカットが使用可能なテーブルとして表示されない場合は、「トラブルシューティング」セクションを確認してください。
トラブルシューティング
次のヒントは、Iceberg テーブルがこの機能と互換性があることを確認するのに役立ちます。
Iceberg テーブルのフォルダー構造を確認する
適切なストレージ エクスプローラー ツールで Iceberg フォルダーを開き、Iceberg フォルダーのディレクトリ一覧が元の場所にあることを確認します。 次の例のようなフォルダー構造が表示されます。
../
|-- MyIcebergTable123/
|-- data/
|-- A5WYPKGO_2o_APgwTeNOAxg_0_1_002.parquet
|-- A5WYPKGO_2o_AAIBON_h9Rc_0_1_003.parquet
|-- metadata/
|-- 00000-1bdf7d4c-dc90-488e-9dd9-2e44de30a465.metadata.json
|-- 00001-08bf3227-b5d2-40e2-a8c7-2934ea97e6da.metadata.json
|-- 00002-0f6303de-382e-4ebc-b9ed-6195bd0fb0e7.metadata.json
|-- 1730313479898000000-Kws8nlgCX2QxoDHYHm4uMQ.avro
|-- 1730313479898000000-OdsKRrRogW_PVK9njHIqAA.avro
|-- snap-1730313479898000000-9029d7a2-b3cc-46af-96c1-ac92356e93e9.avro
|-- snap-1730313479898000000-913546ba-bb04-4c8e-81be-342b0cbc5b50.avro
メタデータ フォルダーが表示されない場合、またはこの例に示されている拡張子のファイルが表示されない場合は、適切に生成された Iceberg テーブルがない可能性があります。
変換ログを確認する
Iceberg テーブルを Delta Lake テーブルとして仮想化すると、_delta_log/
という名前のフォルダーがショートカット フォルダー内に存在するようになります。 このフォルダーには、変換が正常に行われた後の Delta Lake 形式のメタデータ (Delta ログ) が含まれています。
このフォルダーには、最新の変換試行の成功または失敗に関する詳細を含む latest_conversion_log.txt
ファイルも含まれています。
ショートカットを作成した後にこのファイルの内容を確認するには、レイクハウスの [テーブル] 領域にある Iceberg テーブル ショートカットのメニューを開き、[ファイルの表示] を選択します。
次の例のような構造が表示されます。
Tables/
|-- MyIcebergTable123/
|-- data/
|-- <data files>
|-- metadata/
|-- <metadata files>
|-- _delta_log/ <-- Virtual folder. This folder doesn't exist in the original location.
|-- 00000000000000000000.json
|-- latest_conversion_log.txt <-- Conversion log with latest success/failure details.
変換ログ ファイルを開き、最新の変換時間、または失敗の詳細を確認します。 変換ログ ファイルが表示されない場合、変換は試行されませんでした。
変換が試行されなかった場合
変換ログ ファイルが表示されない場合、変換は試行されませんでした。 変換が試行されない一般的な理由を次に 2 つ示します。
ショートカットが適切な場所に作成されなかった。
Iceberg テーブルへのショートカットを Delta Lake 形式に変換するには、スキーマ非対応のレイクハウスのフォルダーの直下にショートカットが配置されている必要があります。 テーブルを Delta Lake テーブルとして自動的に仮想化する場合は、ショートカットを [ファイル] セクションや別のフォルダーの下に配置してはいけません。
ショートカットのターゲット パスが Iceberg フォルダー パスではない。
ショートカットを作成する際に、[ターゲットの保存場所] で選択するフォルダー パスは Iceberg テーブル フォルダーでなければなりません。 このフォルダーには フォルダーと
metadata
フォルダーがdata
。
Snowflake の "ファブリック容量リージョンを検証できません" というエラー メッセージ
Snowflake を使用して新しい Iceberg テーブルを OneLake に書き込む場合は、次のエラー メッセージが表示されることがあります。
ファブリック容量リージョンを検証できません。 理由: 'アクセス トークンが無効です。 これは、認証とスコープが原因である可能性があります。 委任されたスコープを確認してください。'
このエラーが表示された場合は、「 Snowflake を使用して Iceberg テーブルを OneLake に書き込む 」セクションで説明されている両方のテナント設定が有効になっていることを、Fabric テナント管理者に再確認してください。
- Fabric UI の右上隅にある [設定] を開き、[ 管理ポータル] を選択します。
- [ テナント設定] の [ 開発者設定 ] セクションで、 サービス プリンシパルが Fabric API を使用できるというラベルの付いた設定を有効にします。
- 同じ領域の [OneLake 設定 ] セクションで、[ ユーザーは Fabric 外部のアプリで OneLake に格納されているデータにアクセスできる] というラベルの設定を有効にします。
制限と考慮事項
この機能を使用する際には、次の一時的な制限事項に注意してください。
サポートされているデータ型
次の Iceberg 列のデータ型は、この機能を使用して対応する Delta Lake 型にマップされます。
Iceberg 列の型 Delta Lake 列の型 コメント int
integer
long
long
「型の幅の問題」を参照してください。 float
float
double
double
「型の幅の問題」を参照してください。 decimal(P, S)
decimal(P, S)
「型の幅の問題」を参照してください。 boolean
boolean
date
date
timestamp
timestamp_ntz
timestamp
Iceberg データ型にはタイム ゾーン情報が含まれません。timestamp_ntz
Delta Lake 型は、Fabric ワークロード全体で完全にはサポートされていません。 タイム ゾーンを含むタイムスタンプを使用することをお勧めします。timestamptz
timestamp
Snowflake でこの型を使用するには、Iceberg テーブルの作成時に列の型として timestamp_ltz
を指定します。 Snowflake でサポートされている Iceberg データ型の詳細については、こちらを参照してください。string
string
binary
binary
time
なし サポートされていません 型の幅の問題
Snowflake を使用して Iceberg テーブルに書き込む場合で、テーブルに有効桁数が
INT64
= 10 の列の型double
、Decimal
、または > が含まれている場合、結果の仮想 Delta Lake テーブルは、すべての Fabric エンジンでは必ずしも使用できない可能性があります。 次のようなエラーが表示される可能性があります。Parquet column cannot be converted in file ... Column: [ColumnA], Expected: decimal(18,4), Found: INT32.
この問題の解決に取り組んでいます。
回避策: Lakehouse テーブル プレビュー UI を使用していて、この問題が発生する場合は、SQL エンドポイント ビュー (右上隅の [Lakehouse ビューの選択]、[SQL エンドポイントへの切り替え] を選択) に切り替えて、そこからテーブルをプレビューすることで、このエラーを解決できます。 その後、Lakehouse ビューに戻ると、テーブルのプレビューが適切に表示されます。
Spark ノートブックまたはジョブを実行していて、この問題が発生する場合は、
spark.sql.parquet.enableVectorizedReader
Spark 構成をfalse
に設定することで、このエラーを解決できます。 Spark ノートブックで実行する PySpark コマンドの例を次に示します。spark.conf.set("spark.sql.parquet.enableVectorizedReader","false")
Iceberg テーブル メタデータ ストレージはポータブルではない
Iceberg テーブルのメタデータ ファイルは、相互の参照を絶対パス参照を使用して行います。 Iceberg のメタデータ ファイルを書き換えないで Iceberg テーブルのフォルダーの内容をコピーしたり別の場所に移動したりすると、この OneLake 機能を含め、Iceberg の読み取りができなくなります。
対処法:
この機能を使用するために Iceberg テーブルを別の場所に移動する必要がある場合は、最初に Iceberg テーブルを書き込んだツールを使用して、目的の場所に新しい Iceberg テーブルを書き込みます。
Iceberg テーブル フォルダーに含まれているメタデータ ファイルのセットは 1 つのみにする必要がある
Snowflake で Iceberg テーブルをドロップして再作成しても、メタデータ ファイルはクリーンアップされません。 この動作は、Snowflake の
UNDROP
機能をサポートする仕様です。 ただし、ショートカットはフォルダーを直接指しており、そのフォルダー内に複数のメタデータ ファイルセットが含まれるようになったため、古いテーブルのメタデータ ファイルを削除するまでテーブルを変換できません。Iceberg テーブルのメタデータ フォルダーに複数のメタデータ ファイルセットが見つかった場合、変換は失敗します。
対処法:
変換されたテーブルに正しいバージョンのテーブルが反映されるようにするには、次を確認します。
- 同一のフォルダー内に複数の Iceberg テーブルを格納していないことを確認します。
- Iceberg テーブルをドロップした後、テーブルを再作成する前に Iceberg テーブルのフォルダーの内容をクリーンアップします。
メタデータの変更は即座に反映されない
列の追加、列の削除、列の名前変更、列の型の変更など、Iceberg テーブルにメタデータの変更を加えた場合、データの変更 (データ行の追加など) が行われるまで、テーブルの再変換は行われない可能性があります。
最新のメタデータの変更が含まれている適切な最新のメタデータ ファイルをピックアップするようにする修正に取り組んでいます。
対処法:
Iceberg テーブルにスキーマ変更を加えた後、データ行を追加したり、データに他の変更を加えたりします。 その変更後、Fabric でテーブルをリフレッシュして最新のビューを確認できるようになります。
リージョンの可用性の制限事項
この機能は、次のリージョンではまだ使用できません。
- カタール中部
- ノルウェー西部
対処法:
他のリージョンの Fabric 容量にアタッチされているワークスペースでは、この機能を使用できます。 Microsoft Fabric が使用可能なリージョンの完全な一覧を確認する。
プライベート リンクはサポートされていない
現在、この機能は、プライベート リンクが有効になっているテナントまたはワークスペースではサポートされていません。
この制限を取り除くよう改善に取り組んでいます。
OneLake ショートカットは同一リージョンでなければならない
この機能の使用には、OneLake の場所を指すショートカットを使用する場合に一時的な制限があります。ショートカットのターゲットの場所は、ショートカット自体と同じリージョンになければなりません。
この要件を取り除くよう改善に取り組んでいます。
対処法:
別のレイクハウスの Iceberg テーブルへの OneLake ショートカットがある場合は、他のレイクハウスが同じリージョンのキャパシティに関連付けられているようにしてください。
特定の Iceberg パーティション変換の種類はサポートされていません
現在、 Iceberg パーティションの種類
bucket[N]
、truncate[W]
、およびvoid
はサポートされていません。変換される Iceberg テーブルにこれらのパーティション変換の種類が含まれている場合、Delta Lake 形式への仮想化は成功しません。
この制限を取り除くよう改善に取り組んでいます。
関連するコンテンツ
- Snowflake を使用して、OneLake で Iceberg テーブルを作成または読み取る。
- Fabric と OneLake のセキュリティの詳細について説明します。
- OneLake のショートカットの詳細を参照する