次の方法で共有


OneLake で Snowflake を Iceberg テーブルで使用する

Microsoft OneLake は、Apache Iceberg テーブルのストレージとアクセスに Snowflake と共に使用できます。

このガイドに従って、Azure で Snowflake を使用して次の操作を行います。

  • Iceberg テーブルを OneLake に直接書き込む
  • Delta Lake 形式から変換された仮想 Iceberg テーブルの読み取り

Important

この機能は プレビュー段階です

作業を開始する前に、次に示す前提条件の手順に従います。

Prerequisite

Azure で Snowflake を使用して OneLake で Iceberg テーブルを書き込んだり読み取ったりするには、Entra ID の Snowflake アカウントの ID が Fabric と通信できる必要があります。 サービス プリンシパルが Fabric API を呼び出し、OneLake API を呼び出せるようにする Fabric テナント レベルの設定を有効にします。

Azure で Snowflake を使用して Iceberg テーブルを OneLake に書き込む

Azure で Snowflake を使用する場合は、次の手順に従って、Iceberg テーブルを OneLake に書き込むことができます。

  1. Fabric キャパシティが Snowflake インスタンスと同じ Azure の場所にあることを確認します。

    Fabric レイクハウスに関連付けられている Fabric キャパシティの場所を特定します。 レイクハウスを含む Fabric ワークスペースの設定を開きます。

    Fabric キャパシティのリージョンを示すスクリーンショット。

    Azure アカウント インターフェイスの Snowflake の左下隅で、Snowflake アカウントの Azure リージョンを確認します。

    Snowflake アカウント リージョンを示すスクリーンショット。

    これらのリージョンが異なる場合は、Snowflake アカウントと同じリージョン内の別の Fabric キャパシティを使用する必要があります。

  2. レイクハウスの [ファイル] 領域のメニューを開き、[プロパティ] を選択し、そのフォルダーの URL (HTTPS パス) をコピーします。

    [プロパティ] メニュー項目を示すスクリーンショット。

  3. Fabric テナント ID を特定します。 Fabric UI の右上隅にあるユーザー プロファイルを選択し、[テナント名] の横にある情報バブルにマウス ポインターを合わせます。 テナント IDをコピーしてください。

    [テナント ID] を示すスクリーンショット。

  4. Snowflake で、レイクハウス内の EXTERNAL VOLUME フォルダーへのパスを使用してFilesを設定します。 Snowflake 外部ボリュームの設定の詳細については、こちらを参照してください。

    Note

    Snowflake では URL スキームを azure://する必要があるため、パスを https:// から azure:// に変更してください。

    CREATE OR REPLACE EXTERNAL VOLUME onelake_write_exvol
    STORAGE_LOCATIONS =
    (
        (
            NAME = 'onelake_write_exvol'
            STORAGE_PROVIDER = 'AZURE'
            STORAGE_BASE_URL = 'azure://<path_to_lakehouse>/Files/icebergtables'
            AZURE_TENANT_ID = '<Tenant_ID>'
        )
    );
    

    このサンプルでは、この外部ボリュームを使用して作成されたすべてのテーブルは、Files/icebergtables フォルダー内の Fabric レイクハウスに格納されます。

  5. 外部ボリュームが作成されたら、次のコマンドを実行して、同意 URL と、Snowflake が OneLake への書き込みに使用するアプリケーションの名前を取得します。 このアプリケーションは、Snowflake アカウント内の他のすべての外部ボリュームで使用されます。

    DESC EXTERNAL VOLUME onelake_write_exvol;
    

    このコマンドの出力では、AZURE_CONSENT_URL プロパティと AZURE_MULTI_TENANT_APP_NAME プロパティが返されます。 両方の値を書き留めます。 Azure マルチテナント アプリ名は <name>_<number> のようになっていますが、キャプチャする必要があるのは <name> の部分のみです。

  6. 前の手順の同意 URL を新しいブラウザー タブで開きます (まだ行っていない場合)。 続行する場合は、求められたら、必要なアプリケーションのアクセス許可に同意します。 Snowflake のメイン Web サイトにリダイレクトされる場合があります。

  7. Fabric に戻り、ワークスペースを開き、[アクセスの管理] を選択し、続いて [ユーザーまたはグループの追加] を選択します。 Snowflake 外部ボリュームで使用されるアプリケーションに、ワークスペース内のレイクハウスにデータを書き込むのに必要なアクセス許可を付与します。 共同作成者ロールを付与することをお勧めします。

  8. Snowflake に戻り、新しい外部ボリュームを使用して Iceberg テーブルを作成します。

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory (
        InventoryId int,
        ItemName STRING
    )
    EXTERNAL_VOLUME = 'onelake_write_exvol'
    CATALOG = 'SNOWFLAKE'
    BASE_LOCATION = 'Inventory/';
    

    このステートメントを実行すると、外部ボリュームで定義されているフォルダー パス内に Inventory という名前の新しい Iceberg テーブル フォルダーが作成されます。

  9. Iceberg テーブルにデータを追加します。

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. 最後に、同じレイクハウスの [テーブル] 領域で、Iceberg テーブルへの OneLake ショートカットを作成できます。 そのショートカットを使用すると、Iceberg テーブルは、Fabric ワークロード全体で使用するための Delta Lake テーブルとして表されます。

Azure で Snowflake を使用して OneLake から仮想 Iceberg テーブルを読み取る

Azure で Snowflake を使用して、Fabric の Delta Lake テーブルに基づいて仮想 Iceberg テーブルを読み取る場合は、次の手順に従います。

  1. ガイドに従って、Delta Lake テーブルが Iceberg に正常に変換されたことを確認し、テーブルを含むデータ項目へのパスと、テーブルの最新の*.metadata.json ファイルを書き留めます。

  2. Fabric テナント ID を特定します。 Fabric UI の右上隅にあるユーザー プロファイルを選択し、[テナント名] の横にある情報バブルにマウス ポインターを合わせます。 テナント IDをコピーしてください。

    [テナント ID] を示すスクリーンショット。

  3. Snowflake で、テーブルを含むデータ項目のEXTERNAL VOLUME フォルダーへのパスを使用して、Tablesを設定します。 Snowflake 外部ボリュームの設定の詳細については、こちらを参照してください。

    CREATE OR REPLACE EXTERNAL VOLUME onelake_read_exvol
    STORAGE_LOCATIONS =
    (
        (
            NAME = 'onelake_read_exvol'
            STORAGE_PROVIDER = 'AZURE'
            STORAGE_BASE_URL = 'azure://<path_to_data_item>/Tables/'
            AZURE_TENANT_ID = '<Tenant_ID>'
        )
    )
    ALLOW_WRITES = false;
    

    Note

    Snowflake では URL スキームを azure:// にする必要があるため、https://azure:// に必ず変更してください。

    <path_to_data_item>を、https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828などのデータ項目へのパスに置き換えます。

  4. 外部ボリュームが作成されたら、次のコマンドを実行して、同意 URL と、Snowflake が OneLake への書き込みに使用するアプリケーションの名前を取得します。 このアプリケーションは、Snowflake アカウント内の他のすべての外部ボリュームで使用されます。

    DESC EXTERNAL VOLUME onelake_read_exvol;
    

    このコマンドの出力では、AZURE_CONSENT_URL プロパティと AZURE_MULTI_TENANT_APP_NAME プロパティが返されます。 両方の値を書き留めます。 Azure マルチテナント アプリ名は <name>_<number> のようになっていますが、キャプチャする必要があるのは <name> の部分のみです。

  5. 前の手順の同意 URL を新しいブラウザー タブで開きます (まだ行っていない場合)。 続行する場合は、求められたら、必要なアプリケーションのアクセス許可に同意します。 Snowflake のメイン Web サイトにリダイレクトされる場合があります。

  6. Fabric に戻り、ワークスペースを開き、[アクセスの管理] を選択し、続いて [ユーザーまたはグループの追加] を選択します。 Snowflake 外部ボリュームで使用されるアプリケーションに、ワークスペース内のデータ項目からデータを読み取るために必要なアクセス許可を付与します。

    Tip

    必要に応じて、代わりにデータ項目レベルでアクセス許可を付与することもできます。 OneLake データ アクセスの詳細を確認します。

  7. まだ行っていない場合は、Snowflake で CATALOG INTEGRATION オブジェクトを作成します。 これは、Snowflake がストレージ内の既存の Iceberg テーブルを参照するために必要です。

    CREATE CATALOG INTEGRATION onelake_catalog_integration
    CATALOG_SOURCE = OBJECT_STORE
    TABLE_FORMAT = ICEBERG
    ENABLED = TRUE;
    
  8. Snowflake に戻り、OneLake の仮想化された Iceberg テーブルの最新のメタデータ ファイルを参照する Iceberg テーブルを作成します。

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.<TABLE_NAME>
    EXTERNAL_VOLUME = 'onelake_read_exvol'
    CATALOG = onelake_catalog_integration
    METADATA_FILE_PATH = '<metadata_file_path>';
    

    Note

    <TABLE_NAME>をテーブル名に置き換え、<metadata_file_path>を Iceberg テーブルのメタデータ ファイル パス (dbo/MyTable/metadata/321.metadata.json など) に置き換えます。

    このステートメントを実行すると、仮想化された Iceberg テーブルへの参照が作成され、Snowflake を使用してクエリを実行できるようになりました。

  9. 次のステートメントを実行して、仮想化された Iceberg テーブルに対してクエリを実行します。

    SELECT TOP 10 * FROM MYDATABASE.PUBLIC.<TABLE_NAME>;
    

Troubleshooting

OneLake テーブル形式の仮想化と Delta Lake と Apache Iceberg テーブル形式間の変換に関するドキュメントの トラブルシューティング と制限事項と 考慮事項 のセクションを参照してください。