Spark を使用してセマンティック モデルから読み取り、Power BI で使用できるデータを書き込む
この記事では、Microsoft Fabric の セマンティック リンク Spark ネイティブ コネクタを使用して、セマンティック モデルでデータとメタデータを読み取り、メジャーを評価する方法について説明します。 また、セマンティック モデルで使用できるデータを書き込む方法についても説明します。
前提条件
Microsoft Fabric サブスクリプションを取得します。 または、無料の Microsoft Fabric 試用版にサインアップします。
Microsoft Fabric にサインインします。
ホーム ページの左下にあるエクスペリエンス スイッチャーを使用して、Fabric に切り替えます。
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 セマンティック モデルを使用します。 このセマンティック モデルは、企業の製造マーケティング資料を参照し、さまざまな事業単位の製品、顧客、および対応する収益に関するデータが含まれています。
- 左側のペインで、[ワークスペース] を選択し、ワークスペースの名前を選んで開きます。
レポートまたはページネーションされたレポート をこのコンピューター からインポートし、 Customer Profitability Sample.pbix セマンティック モデルを選択します。
アップロードが完了すると、ワークスペースには、Power BI レポート、ダッシュボード、Customer Profitability Sample という名前のセマンティック モデルという 3 つの新しいアーティファクトがあります。 この記事の手順では、このセマンティック モデルを使用します。
Python、R、SQL、Scala で Spark を使用したデータの読み取りと書き込み
既定では、セマンティック モデルへのアクセスに使用されるワークスペースは次のとおりです。
- アタッチされたレイクハウスのワークスペース、または
- レイクハウスがアタッチされていない場合は、ノートブックのワークスペース。
Microsoft Fabric は、ワークスペース内のすべてのセマンティック モデルのすべてのテーブルを Spark テーブルとして公開します。 すべての Spark SQL コマンドは、Python、R、Scala で実行できます。 セマンティック リンク Spark ネイティブ コネクタでは、Power BI エンジンへの Spark 述語のプッシュダウンがサポートされています。
ヒント
Power BI のテーブルとメジャーは通常の Spark テーブルとして公開されるため、1 つのクエリで他の Spark データ ソースと結合できます。
PySpark を使用して、ワークスペース内のすべてのセマンティック モデルのテーブルを一覧表示します。
df = spark.sql("SHOW TABLES FROM pbi") display(df)
SparkR を使用して、Customer Profitability Sample セマンティック モデル内の Customer テーブルからデータを取得します。
Note
テーブルの取得には厳しい制限があり (読み取りの制限に関する記事を参照)、結果が不完全なものになる可能性があります。 集計プッシュダウンを使用して、転送されるデータの量を減らします。 サポートされている集計は、COUNT、SUM、AVG、MIN、MAX です。
%%sparkr df = sql("SELECT * FROM pbi.`Customer Profitability Sample`.Customer") display(df)
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]`
Spark スキーマを使用して、使用可能なメジャーとディメンションを検査します。
spark.table("pbi.`Customer Profitability Sample`._Metrics").printSchema()
データを 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 セッションを再起動する必要があります。