次の方法で共有


Spark を使用してセマンティック モデルから読み取り、Power BI で使用できるデータを書き込む

この記事では、Microsoft Fabric の セマンティック リンク Spark ネイティブ コネクタを使用して、セマンティック モデルでデータとメタデータを読み取り、メジャーを評価する方法について説明します。 また、セマンティック モデルで使用できるデータを書き込む方法についても説明します。

前提条件

  • Microsoft Fabric の Data Science エクスペリエンスに移動します。

    • 左側のウィンドウで、[ワークロード] を選択します。
    • データ サイエンスを選択
  • 新しいノートブックを作成して、コードをコピーしてセルに貼り付けます。

  • Spark 3.4 以降では、Fabric を使用する場合、セマンティック リンクは既定のランタイムで使用でき、インストールする必要はありません。 Spark 3.3 以前を使用している場合、またはセマンティック リンクの最新バージョンに更新する場合は、次のコマンドを実行できます。

    python %pip install -U semantic-link  

  • レイクハウスをノートブックに追加します

  • ファブリック サンプル リポジトリのデータセット フォルダーから Customer Profitability Sample.pbix セマンティック モデルをダウンロードし、セマンティック モデルをローカルに保存します。

ワークスペースにセマンティック モデルをアップロードする

この記事では、Customer Profitability Sample.pbix セマンティック モデルを使用します。 このセマンティック モデルは、企業の製造マーケティング資料を参照し、さまざまな事業単位の製品、顧客、および対応する収益に関するデータが含まれています。

  1. 左側のペインで、[ワークスペース] を選択し、ワークスペースの名前を選んで開きます。
  2. レポートまたはページネーションされたレポートをこのコンピューター からインポート し、Customer Profitability Sample.pbix セマンティック モデルを選択します。

セマンティック モデルをワークスペースにアップロードするためのインターフェイスを示すスクリーンショット。

アップロードが完了すると、ワークスペースには、Power BI レポート、ダッシュボード、Customer Profitability Sample という名前のセマンティック モデルという 3 つの新しいアーティファクトがあります。 この記事の手順では、このセマンティック モデルを使用します。

ワークスペースにアップロードされた Power BI ファイルの項目を示すスクリーンショット。

Python、R、SQL、Scala で Spark を使用したデータの読み取りと書き込み

既定では、セマンティック モデルへのアクセスに使用されるワークスペースは次のとおりです。

  • アタッチされたレイクハウスのワークスペース、または
  • レイクハウスがアタッチされていない場合は、ノートブックのワークスペース。

Microsoft Fabric は、ワークスペース内のすべてのセマンティック モデルのすべてのテーブルを Spark テーブルとして公開します。 すべての Spark SQL コマンドは、Python、R、Scala で実行できます。 セマンティック リンク Spark ネイティブ コネクタでは、Power BI エンジンへの Spark 述語のプッシュダウンがサポートされています。

ヒント

Power BI のテーブルとメジャーは通常の Spark テーブルとして公開されるため、1 つのクエリで他の Spark データ ソースと結合できます。

  1. PySpark を使用して、ワークスペース内のすべてのセマンティック モデルのテーブルを一覧表示します。

    df = spark.sql("SHOW TABLES FROM pbi")
    display(df)
    
  2. SparkR を使用して、Customer Profitability Sample セマンティック モデル内の Customer テーブルからデータを取得します。

    Note

    テーブルの取得には厳しい制限があり (読み取りの制限に関する記事を参照)、結果が不完全なものになる可能性があります。 集計プッシュダウンを使用して、転送されるデータの量を減らします。 サポートされている集計は、COUNT、SUM、AVG、MIN、MAX です。

    %%sparkr
    
    df = sql("SELECT * FROM pbi.`Customer Profitability Sample`.Customer")
    display(df)
    
  3. Power BI メジャーは、仮想テーブル _Metrics を通じて使用できます。 次のクエリでは、"リージョン" と "業界" ごとに "合計収益" と "収益予算" を計算します。

    %%sql
    
    SELECT
        `Customer[Country/Region]`,
        `Industry[Industry]`,
        AVG(`Total Revenue`),
        AVG(`Revenue Budget`)
    FROM
        pbi.`Customer Profitability Sample`.`_Metrics`
    WHERE
        `Customer[State]` in ('CA', 'WA')
    GROUP BY
        `Customer[Country/Region]`,
        `Industry[Industry]`
    
  4. Spark スキーマを使用して、使用可能なメジャーとディメンションを検査します。

    spark.table("pbi.`Customer Profitability Sample`._Metrics").printSchema()
    
  5. データを Delta テーブルとしてレイクハウスに保存します。

    delta_table_path = "<your delta table path>" #fill in your delta table path 
    df.write.format("delta").mode("overwrite").save(delta_table_path)
    

読み取りアクセスの制限

読み取りアクセス API には、次の制限があります。

  • Spark SQL を使用した Power BI テーブル アクセスは、Power BI バックエンドの制限の対象です。
  • Spark _Metrics クエリの述語プッシュダウンは、1 つ IN 式に制限されます。 追加の IN 式とサポートされていない述語は、データ転送後に Spark で評価されます。
  • Spark SQL を使用してアクセスする Power BI テーブルの述語プッシュダウンでは、次の式はサポートされていません。
  • Spark SQL で新しいセマンティック モデルにアクセスできるようにするには、Spark セッションを再起動する必要があります。