次の方法で共有


OneLake と Azure Databricks の統合

この記事では、Azure Databricks サーバーレス コンピューティングを使用して OneLake に接続する方法について説明します。

[前提条件]

接続する前に、次の内容を確認してください。

  • ファブリック ワークスペースとレイクハウス。
  • Premium Azure Databricks ワークスペース。
  • 少なくとも 共同作成者 ワークスペース ロールが割り当てられているサービス プリンシパル。
  • シークレットを格納および取得するためのデータベース シークレットまたは Azure Key Vault (AKV)。 この例では、Databricks シークレットを使用します。

Databricks サーバーレス コンピューティングを使用して OneLake に接続する

Databricks サーバーレス コンピューティングを使用すると、クラスターをプロビジョニングせずにワークロードを実行できます。 Databricks サーバーレス ドキュメントによると、サーバーレス コンピューティングでの Spark の構成を自動化するために、Databricks サーバーレスでは 、サポートされている Spark プロパティのサブセットの構成のみが許可されます。

この制限は、Azure Databricks に固有の制限ではありません。 アマゾン ウェブ サービス (AWS)Google Cloud での Databricks サーバーレス実装も同じ動作を示します。

Databricks サーバーレス コンピューティングにリンクされているノートブックでサポートされていない Spark 構成を変更または設定しようとすると、システムからCONFIG_NOT_AVAILABLE エラーが返されます。

ユーザーがサーバーレス コンピューティングでサポートされていない Spark 構成を変更しようとした場合のエラー メッセージを示すスクリーンショット。

OneLake では、Databricks サーバーレス コンピューティングからの受信接続がサポートされています。 適切なアクセス権があり、Databricks サーバーレス コンピューティングと OneLake の間にネットワーク パスがある場合は、Databricks サーバーレス コンピューティングから OneLake に接続できます。 Databricks サーバーレスでは、サポートされていない Spark プロパティがコードで変更されていないことを確認します。

ノートブックを作成する

  1. Databricks ワークスペースにノートブックを作成し、サーバーレス コンピューティングにアタッチします。

    Databricks ノートブックをサーバーレス コンピューティングに接続する方法を示すスクリーンショット。

  2. Python モジュールをインポートする - このサンプルでは、次の 3 つのモジュールを使用します。

    • msal は Microsoft Authentication Library (MSAL) であり、開発者が Microsoft ID プラットフォーム認証をアプリケーションに統合できるように設計されています。
    • requests モジュールは、Python を使用して HTTP 要求を行うために使用されます。
    • delta lake は、Python を使用して Delta Lake テーブルの読み取りと書き込みを行うために使用されます。
    from msal import ConfidentialClientApplication
    import requests
    from deltalake import DeltaTable
    
  3. アプリケーション ID を含む Microsoft Entra テナントの変数を宣言します。 Microsoft Fabric がデプロイされているテナントのテナント ID を使用します。

    # Fetch from Databricks secrets.
    tenant_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for tenant _id>")
    client_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for client _id>") 
    client_secret = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for secret>")
    
  4. Fabric ワークスペース変数を宣言します。

    workspace_id = "<replace with workspace name>"
    lakehouse_id = "<replace with lakehouse name>"
    table_to_read = "<name of lakehouse table to read>"
    storage_account_name = workspace_id
    onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"
    
  5. トークンを取得するためにクライアントを初期化します。

    authority = f"https://login.microsoftonline.com/{tenant_id}"
    
    app = ConfidentialClientApplication(
     client_id,
     authority=authority,
     client_credential=client_secret
     )
    
     result = app.acquire_token_for_client(scopes=["https://onelake.fabric.microsoft.com/.default"])
    
     if "access_token" in result:
       access_token = result["access_token"]
       print("Access token acquired.")
       token_val = result['access_token']
    
  6. OneLake からデルタ テーブルを読み取る

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    

    サービス プリンシパルには 共同作成者 ワークスペース ロールの割り当てがあり、それを使用して OneLake にデータを書き戻すことができます。

上記の手順を完了したら、サーバーレス コンピューティングにアタッチされたノートブックである Databricks を使用して、OneLake からデータを読み取ることができます。