Open9

Fabric Analytics Engineer Associate

しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Fabricの概要

OneLake

データ プロフェッショナルとビジネスがデータ プロジェクトで共同作業するための単一の統合環境を提供する。

  • OneCopy

    • データを移動または複製することなく、1 つのコピーからデータを読み取れる。
    • データを移動または複製することなく、異なるリージョンとクラウド間のストレージの場所を 1 つの論理レイクにまとめる。
    • Fabric のすべてのコンピューティング ワークロードが OneLake と連携するように事前構成されている。
  • Azure Data Lake Storage (ADLS) 上に構築されている。

  • Delta、Parquet、CSV、JSON などの任意のファイル形式でデータを格納できる。

  • Fabric のコンピューティング エンジンはすべて、OneLake にデータを自動的に格納する。

    • 表形式データの場合、Fabric の分析エンジンを使用すると、データが Delta Parquet 形式で書き込まれる。
  • 他のファイルまたはストレージの場所を指す OneLake 内に埋め込まれた参照であるショートカットを作成する機能がある。

    • コピーしなくても既存のクラウド データをすばやくソース化でき、Fabric エクスペリエンスにより同じソースからデータを派生させ、常に同期させられる。

Fabricの要素

  • Synapse Data Engineering
    • 大規模なデータ変換のための、Sparkプラットフォームを使用したデータエンジニアリング
  • Synapse Data Warehouse
    • SQLサーバのパフォーマンスとスケーリングを備えたデータウェアハウス
  • Synapse Data Science
    • スケーラブルな環境でのモデルトレーニングと実行追跡のための、Azure Machine Learningと、Sparkを使用したデータサイエンス
  • Synapse Real-Time Ayalytics
    • 大量データをリアルタイムでクエリ/分析する
  • Data Factory
    • データを移動/変換するためのPowerQueryとAzureDataFactoryを組み合わせたデータ統合
  • Power BI
    • データをビジュアル的に表示する

セキュリティとガバナンス

  • 管理センターで、グループとアクセス許可の管理、データソースとゲートウェイの構成、使用状況とパフォーマンスの監視ができる。
  • Fabric管理APIと、SDKがある。他システムとの連携が可能。
  • Fabricテナントは、Microsoft Purview情報保護と統合されている。
    • Microsoft Purview情報保護の秘密度ラベルを使用して、インポートからエクスポートまで、組織が機密データを分類して保護できる。
しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Fabricのレイクハウス概要

Microsoft Fabricの基盤の特徴

  • データ レイクの柔軟でスケーラブルなストレージ
    • OneLakeのスケーラブルなストレージレイヤー上に構築されている。
  • データウェアハウスのデータに対してクエリを実行し分析できる
    • ビックデータの処理には、Apache SparkとSQLエンジンを使用するLakehouse
  • Delta 形式テーブル

レイクハウスの利点

  • SparkエンジンとSQLエンジンを使用して大規模データを処理し、機械学習または予測モデリング分析をサポートする。
  • レイクハウスデータはスキーマオンリード形式で構成される。※定義済みのスキーマを使用するのではなく、必要に応じてスキーマを定義できる
  • データの一貫性と整合性のためのACID(原子性、一貫性、分離性、持続性)トランザクションがDelta Lake形式のテーブルを介してサポートされる。

利用方法の概要

  • Microsoft FabricのPremiumレベルのワークスペースにレイクハウスを作成できる。

  • Data Factoryパイプラインまたはデータフローを使用してデータインポートの自動化が可能。

  • Azure Data Lake Store Gen2やレイクハウス外部の場所のFabric ショートカットを作成可能。

  • Lakehouse Explorer で、ファイル、フォルダ、ショートカット、テーブルを参照し、Fabricプラットフォーム内でその内容を表示できる。

  • Data Factoryパイプラインを使い、複雑なデータ変換プロセスを実装可能。

  • データ変換後、SQLを使用したクエリ実行、機械学習のトレーニング、リアルタイムインテリジェンスの実行、PowerBIでのレポート開発が可能。

  • データ分類やアクセス制御などのガバナンスの適用可能

しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Lakehouseの使用方法

Lakehouseの作成

以下3つが作成される。

  • レイクハウス
    • ファイル、フォルダ、テーブルデータを格納するストレージ及びメタデータ
  • セマンティックモデル
    • レイクハウス内のテーブルに基づいて自動的に作成されるセマンティックモデル。
    • PowerBIレポートはセマンティックモデルから作成可能
  • SQL分析エンドポイント
    • Transact-SQLを使用してデータに対してクエリを実行できる読み取り専用のSQL分析エンドポイント

データは以下2つのモードで操作可能

  • Lakehouse
    • Lakehouse内のテーブル、ファイル、フォルダを追加操作可能
  • SQL分析エンドポイント
    • SQLを使いLakehouse内のテーブルに対してクエリを実行し、リレーショナルセマンティックモデルを管理可能

Lakehouseへのデータインポート

以下の方法でアップロード可能

  • アップロード


しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Lakehouseの使用方法

Lakehouseの作成

以下3つが作成される。

  • レイクハウス
    • ファイル、フォルダ、テーブルデータを格納するストレージ及びメタデータ
  • セマンティックモデル
    • レイクハウス内のテーブルに基づいて自動的に作成されるセマンティックモデル。
    • PowerBIレポートはセマンティックモデルから作成可能
  • SQL分析エンドポイント
    • Transact-SQLを使用してデータに対してクエリを実行できる読み取り専用のSQL分析エンドポイント

データは以下2つのモードで操作可能

  • Lakehouse
    • Lakehouse内のテーブル、ファイル、フォルダを追加操作可能
  • SQL分析エンドポイント
    • SQLを使いLakehouse内のテーブルに対してクエリを実行し、リレーショナルセマンティックモデルを管理可能

Lakehouseへのデータインポート

以下の方法でアップロード可能

  • アップロード
  • データフロー
    • Power Query Onlineを使用して、データをインポート/変換し、Lakehouse内のテーブルにインポート
  • ノートブック
    • Fabricのノートブックを使ってデータをインポート/変換し、Lakehouseのテーブルやファイルにインポート
  • Data Factoryパイプライン
    • データをコピーして、データ処理アクティビティを調整し、結果をレイクハウス内のテーブル/ファイルにインポート

ショートカットを使ったデータアクセス

  • データを外部のストレージに保存したまま、Lakehouseに統合できる。
  • ソースデータのアクセス許可と資格情報は、OneLakeによって管理される。
    • 別の OneLake の場所へのショートカットを介してデータにアクセスする場合、ショートカット先のデータへのアクセスを認可するために、呼び出し元ユーザIDが使われる。ショートカット先の場所のアクセス許可を持っている必要がある。
  • ショートカットは、レイクハウスと KQL データベースの両方に作成できる。
  • レイク内のフォルダーとして表示されることにより、Spark、SQL、リアルタイム インテリジェンス、Analysis Services はすべて、データのクエリ時にショートカットを利用できる。
しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Apache Spark

  • Apache Spark は、Microsoft Fabric の "Spark プール" としてクラスター内の複数の処理ノード間でタスクを調整することで大規模なデータ分析ができる分散データ処理フレームワーク。
  • Spark では、Java、Scala (Java ベースのスクリプト言語)、Spark R、Spark SQL、PySpark (Python の Spark 固有のバリアント) など、さまざまな言語で記述されたコードを実行できる。
    ※実際には、ほとんどの Data Engineering と分析ワークロードは、PySpark と Spark SQL の組み合わせ。

Apache Sparkの構成

Spark プール

  • データ処理タスクを分散するコンピューティングノードで構成される。

  • Fabricでは、各ワークスペースに スタータープール を提供し、最小限のセットアップと構成でSparkジョブを実行できる。

  • ワークロードやコスト制限に従い、スタータープールに含まれるノードを最適化できる。

  • 特定のデータ処理ニーズをサポートするカスタムなSparkプールを作成できる。以下が可能

  • Sparkプールの設定

    • ノードファミリ:仮想マシンの種類
    • 自動スケーリング
    • 動的割り当て:データボリュームに基づいて、workerノードにプロセスを動的に割り当てる

ランタイムと環境

  • Fabricワークスペースにカスタム環境を作成できる。
    • 使用するSparkランタイムの指定
    • 環境にインストールされている組み込みライブラリの表示
    • PyPlからパブリックライブラリをインストール
    • パッケージファイルをアップロードしてカスタムライブラリをインストール
    • 使用するSparkプールの指定
    • 動作をオーバーライドするSpark構成プロパティを指定

そのほかのSpark構成オプション

  • ネイティブ実行エンジン
    • LakehouseインフラでSpark操作を直接実行する処理エンジン
    • ParquetまたはDeltaファイル形式で大規模なデータセットを操作するときのクエリパフォーマンスを向上できる。
    • 環境レベル / 個々のノートブック内で有効化可能。
      • 環境レベルでネイティブ実行エンジンを有効化する設定
        • spark.native.enabled: true
        • spark.shuffle.manager: org.apache.spark.shuffle.sort.ColumnarShuffleManager
      • スクリプトまたはノートブックでネイティブ実行エンジンを有効化する設定
%%configure 
{ 
   "conf": {
       "spark.native.enabled": "true", 
       "spark.shuffle.manager": "org.apache.spark.shuffle.sort.ColumnarShuffleManager" 
   } 
}
  • 高コンカレンシーモード

    • 複数の同時実行ユーザーまたはプロセス間で Spark セッションを共有することで、Spark リソースの使用効率を最適化できる。
    • ノートブックに対して高コンカレンシー モードが有効になっている場合、複数のユーザーは、同じ Spark セッションを使用するノートブックでコードを実行できる。
    • 高コンカレンシー モードを有効にするには、ワークスペース設定インターフェイスの [Data Engineering/科学] セクションで設定する。
  • MLflowの自動ログ機能

    • 機械学習のトレーニングとモデル デプロイを管理するためにデータ サイエンス ワークロードで使用されるオープン ソース ライブラリ。
    • 既定では、Microsoft Fabric は MLflow を使用して機械学習の実験アクティビティを暗黙的にログに記録する。
  • Fabric容量のためのSpark管理

    • Fabric 容量レベルで Spark 設定を管理し、組織内のワークスペースの Spark 設定を制限およびオーバーライドできる。

Sparkコードの実行

2つの実行方法がある。

  • ノートブック
    • Spark を使用してデータを対話的に探索および分析したい場合に使う。
    • 複数の言語で記述されたテキスト、画像、コードを組み合わせることで、他のユーザーとの共有および共同作業が可能。
    • %%sqlや%%spark、%%pysparkなどとすることで、セルのプログラミング言語を変更できる。
%%sql
SELECT YEAR(OrderDate) AS OrderYear,
       SUM((UnitPrice * Quantity) + Tax) AS GrossRevenue
FROM salesorders
GROUP BY YEAR(OrderDate)
ORDER BY OrderYear;
  • Sparkジョブ定義
    • Spark を使用して、データを自動プロセスの一部として取り込んで変換する場合。
    • オンデマンドでの実行、もしくはスケジューリング可能
    • Sparkジョブを設定するには、ワークスペース内にSparkジョブ定義を作成し、スクリプトを指定する。

Spark SQLを用いたデータ操作

  • Spark カタログでクエリを実行するためにデータフレーム内のデータを使用できるようにする一時ビュー
df.createOrReplaceTempView("products_view")
  • ビューは一時的なものなので、セッション終了時に削除される。
    →カタログに保持される "テーブル" を作成して、Spark SQL を使用してクエリを実行できるデータベースを定義できる。
  • Microsoft Fabric では、データ レイク内に示されているテーブル ストレージの場所に、"マネージド" テーブルのデータが格納される。
    • 空のテーブルの作成:spark.catalog.createTable
    • テーブルとして保存:spark.catalog.saveAsTable
      (例)データフレームが products という名前の新しいテーブルとして保存
df.write.format("delta").saveAsTable("products")
  • "外部" テーブルを作成:spark.catalog.createExternalTable
    ※外部テーブルではカタログ内のメタデータを定義するが、その基になるデータは、外部ストレージの場所 (多くの場合、レイクハウスの Files ストレージ領域内にあるフォルダー) から取得する。

Spark SQL APIを使用したデータクエリ

  • 任意の言語で記述されたコードで Spark SQL APIを使用し、カタログ内データにクエリを実行可能
  • (例)products テーブルからデータをデータフレームとして返す。
bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
                      FROM products \
                      WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)

Sparkノートブックでのデータ可視化

Spark ノートブックでデータフレームを表示したり SQLクエリを実行すると、その結果がコード セルの下に表示される。
既定ではテーブルとしてレンダリングされるが、次に示すように結果ビューをグラフに変更し、グラフのプロパティを使用してグラフのデータを視覚化する方法をカスタマイズすることもできる。

グラフィクスパッケージ

Matplotlibライブラリをベースにしたパッケージを使用sできる。

(例)製品データのデータを集計し、Matplotlib を使用して集計データからグラフを作成

  • Matplotlibライブラリでは、Pandasデータフレームに格納する必要があるので、toPandasメソッドを使用して変換
from matplotlib import pyplot as plt

# Get the data as a Pandas dataframe
data = spark.sql("SELECT Category, COUNT(ProductID) AS ProductCount \
                  FROM products \
                  GROUP BY Category \
                  ORDER BY Category").toPandas()

# Clear the plot area
plt.clf()

# Create a Figure
fig = plt.figure(figsize=(12,8))

# Create a bar plot of product counts by category
plt.bar(x=data['Category'], height=data['ProductCount'], color='orange')

# Customize the chart
plt.title('Product Counts by Category')
plt.xlabel('Category')
plt.ylabel('Products')
plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)
plt.xticks(rotation=70)

# Show the plot area
plt.show()

しろくま(Hiroki, Nomura)しろくま(Hiroki, Nomura)

Fabricでの Delta Lake

Microsoft Fabric Lakehouse のテーブルは、Linux Foundation の Delta Lake テーブル形式に基づいている。

Delta Lakeの概要

Spark ベースのデータ レイク処理にリレーショナル データベースのセマンティクスを追加する、オープンソースのストレージ レイヤー。

  • Microsoft Fabric レイクハウスのテーブルは Delta テーブル。

Delta テーブルを使用する利点

  • クエリの実行とデータの変更をサポートするリレーショナル テーブル
    • Apache Spark を使用して、RDBと同じ方法で、データ行の選択、挿入、更新、削除ができる
  • **