1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
Microsoft Fabricは、データの統合、エンジニアリング、分析、ビジネスインテリジェンスなどの機能を統合したSaaS型データ分析ツールです。
そしてMicrosoft Fabricは60日間のフリートライアル期間があります。
さらに、Microsoftが提供する無料のオンライン学習プラットフォームであるMicrosoft Learn(MSLearn)にはたくさんのMicrosoft Fabricに関する記事があります。
本記事はフリートライアル期間を利用してMSLearnの演習を行っていきます。
演習を通して気づいた点やTipsを、なるべく多くのスクリーンショットとともに備忘録として残します。
1-2 MSLearn
今回はMicrosoft Fabric データ ウェアハウスにデータを読み込むを行います。
この演習の学習の目的は以下の通りです。
- Microsoft Fabric のデータ ウェアハウスにデータを読み込むための戦略について学習します。
- Microsoft Fabric のウェアハウスを読み込むためのデータ パイプラインの構築方法について学習します。
- T-SQL を使用してウェアハウスにデータを読み込む方法について学習します。
- データフロー (Gen2) を使用してデータを読み込んで変換する方法について学習します。
1-3 Get started with Microsoft Fabric
以下からMicrosoft Fabricのフリートライアルを開始できます。
Get started with Microsoft Fabric
2. MSLearnの要約
2-1 はじめに
Microsoft Fabric データ ウェアハウスは、データ、分析、AIのための包括的なプラットフォームです。Synapse Analytics によって強化されており、高度なクエリ処理機能と完全なトランザクション T-SQL 機能を提供します。
Microsoft Fabric のウェアハウスは 1 つのデータ レイクを中心に構成され、データについてはParquet ファイル形式で保存されます。これにより、ユーザーはデータの準備、分析、レポートに集中できます。データの一意のコピーは Microsoft OneLake に保存されます。
2-2 ETL(Extract(抽出)、Transform(変換)、Load(読み込み))プロセスについて
処理 | 説明 |
---|---|
データの抽出 | ソースシステムに接続し、分析処理に必要なデータを収集することが含まれます。 |
データの変換 | 抽出されたデータを標準形式に変換するために実行される一連の手順です。異なるテーブルからのデータの結合、データのクリーニング、データの重複排除、データ検証の実行などが含まれます。 |
データの読み込み | 抽出および変換されたデータは、ファクトとディメンションの各テーブルに読み込まれます。増分読み込みの場合、要件に従って継続的な変更を定期的に適用することが含まれます。データの品質とデータウェアハウススキーマとの互換性を確保するためのデータの再フォーマットが含まれます。 |
読み込み後の最適化処理 | データの読み込み後、特定の最適化を実行してデータ ウェアハウスのパフォーマンスを向上させることができます。 |
2-3 データ読み込み戦略について
データ インジェストとデータ読み込みの違い
- データ インジェストと抽出: 生データをさまざまなソースから中央リポジトリに移動させること。
- データ読み込み: 変換または処理されたデータを最終的なストレージ先に読み込むこと。
ステージングの重要性
テーブル読み込み操作、ストアド プロシージャ、関数などの補助オブジェクトを構築して使用する場合があります。
ステージング領域は一時的な領域として機能し、上記の処理を行う場所です。
負荷のかかる操作がデータ ウェアハウスのパフォーマンスに及ぼす影響を最小限に抑えてくれます。
データ読み込みの種類
- 完全読み込み: データ ウェアハウスを初めて設定する際に使用。
- 増分読み込み: 前回の更新以降の変更を反映するために使用。
ビジネス キーと代理キー
- 代理キー: システムによって生成される一意の識別子。
- ビジネス キー: ソース システムから取得されるビジネス上の意味を持つ識別子(例としては、製品コード、顧客 ID、従業員番号など)。
ディメンションテーブルとファクトテーブル
ディメンション テーブルは、データ ウェアハウスにおける「だれ、何、どこ、いつ、なぜ」を表し、ファクト テーブルの生の数値データにコンテキストを与える役割を果たします。
標準的なデータ ウェアハウスの読み込み操作では、まずディメンション テーブルを読み込み、その後にファクト テーブルを読み込みます。これにより、ファクト テーブルが参照するディメンションが既に存在することが保証されます。
2-4 データ パイプラインを使用してウェアハウスを読み込む
データ パイプラインは、大規模なデータ移動とデータ変換のためのワークフローを作成できます。 さまざまなデータ ストアからデータを取り込んで読み込むことができるデータ パイプラインを作成およびスケジュールできます。
データ パイプラインの作成方法
パイプラインを作成するときに使用できるオプションは 3 つあります。
オプション | 説明 |
---|---|
パイプライン アクティビティを追加する | パイプラインエディタを起動し、独自のパイプラインを作成できます。 |
データをコピーする | 様々なデータソースからデータ宛先にデータをコピーするアシスタントを起動します。新しいパイプラインアクティビティが、事前に設定されたデータコピータスクを使用して最後に生成されます。 |
開始するタスクを選択する | あらかじめ定義されたテンプレートのコレクションから選択し、さまざまなシナリオに基づいてパイプラインを開始することができます。 |
2-5 データフロー (Gen2) を使用してデータを読み込む
Dataflow Gen2は新世代のデータフローです。Power Queryの包括的な操作性を提供し、データフローへのデータインポートの各ステップをガイドします。データフローの作成プロセスが簡素化され、ステップ数が削減されました。
データ パイプラインのデータフローを使用して、レイクハウスまたはウェアハウスにデータを取り込んだり、Power BI レポートのデータセットを定義したりできます。
データのインポート
Dataflow Gen2 が起動すると、使用可能なデータを読み込むための多くのオプションがあります。
データのインポート
データフロー変換についてはPower Queryを利用します。Copilotを併用することが可能です。
データの読み込み先を追加する
以下が読込み先になります。
- Azure SQL Database
- Lakehouse
- Azure Data Explorer (Kusto)
- Azure Synapse Analytics (SQL DW)
- Warehouse
また宛先としてWarehouseを選択すると、次の更新方法を選択できます。
Append: 既存のテーブルに新しい行を追加します。
Replace: テーブルの内容全体を新しいデータ セットに置き換えます。
データフローの発行
発行すると、変換とデータ読み込み操作がライブになり、データフローを手動またはスケジュールに従って実行できます。 このプロセスにより、ETL 操作が 1 つの再利用可能な単位にカプセル化され、データ管理ワークフローが合理化されます。
次の演習はT-SQL を使用してウェアハウスにデータを読み込む内容になります。
3. 演習スタート
演習: Microsoft Fabric のウェアハウスにデータを読み込む
上記URLから演習を開始できます。実際のMicrosoft Fabricを使うため、とても勉強になります。
3-1 ワークスペースの作成
1 . [新しいワークスペース] をクリックします。
2 . 任意の名前を記入し、[適用]をクリックします。
3 . ワークスペースが作成されます。
3-2 レイクハウスの作成とファイルのアップロード
このシナリオでは、使用可能なデータがないため、ウェアハウスの読み込みに使用するデータを用意する必要があります。ウェアハウスの読み込みに使用するデータ ファイル用のデータ レイクハウスを作成します。
1 . [+新しい項目] - [レイクハウス]を順にクリックします。
2 . 任意の名前を入力し、[作成]をクリックします。
3 . レイクハウスが作成されます。
4 . 演習用のファイルをダウンロードします。
5 . [Files] フォルダーの [...]メニューをクリックします。
6 . [アップロード] - [ファイルのアップロード]をクリックします。
7 . ダウンロードした演習用のファイルを選択し、[アップロード]をクリックします。
8 . [Files] を選択すると、アップロードしたファイルを確認することができます。
3-3 レイクハウスにテーブルを作成する
1 . [sales.csv]ファイルの [...] メニューをクリックします。
2 . [テーブルに読み込む] - [新しいテーブル] をクリックします。
3 . 下図の通りに設定し、[読み込み]をクリックします。
3-4 ウェアハウスを作成する
ワークスペース、レイクハウス、必要なデータを含む sales テーブルが用意できました。次はデータ ウェアハウスを作成します。
1 . 左側のメニューバーの[...] - [作成]をクリックします。
2 . [Data Warehouse]セクションから[ウェアハウス]を選択します。
3 . 任意の名前を入力し、[作成]をクリックします。
4 . 新しいウェアハウスが作成されます。
3-5 ファクト テーブル、ディメンション、ビューの作成
Sales データ用のファクト・テーブルとディメンジョンを作成します。また、レイクハウスを指すビューも作成します。これにより、ロードに使用するストアドプロシージャのコードを簡素化できます。
1 . ウェアハウスのツールバーで、 [新規SQLクエリ] を選択します。
2 . 以下クエリをコピーして[実行]をクリックします。
CREATE SCHEMA [Sales]
GO
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name='Fact_Sales' AND SCHEMA_NAME(schema_id)='Sales')
CREATE TABLE Sales.Fact_Sales (
CustomerID VARCHAR(255) NOT NULL,
ItemID VARCHAR(255) NOT NULL,
SalesOrderNumber VARCHAR(30),
SalesOrderLineNumber INT,
OrderDate DATE,
Quantity INT,
TaxAmount FLOAT,
UnitPrice FLOAT
);
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name='Dim_Customer' AND SCHEMA_NAME(schema_id)='Sales')
CREATE TABLE Sales.Dim_Customer (
CustomerID VARCHAR(255) NOT NULL,
CustomerName VARCHAR(255) NOT NULL,
EmailAddress VARCHAR(255) NOT NULL
);
ALTER TABLE Sales.Dim_Customer add CONSTRAINT PK_Dim_Customer PRIMARY KEY NONCLUSTERED (CustomerID) NOT ENFORCED
GO
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name='Dim_Item' AND SCHEMA_NAME(schema_id)='Sales')
CREATE TABLE Sales.Dim_Item (
ItemID VARCHAR(255) NOT NULL,
ItemName VARCHAR(255) NOT NULL
);
ALTER TABLE Sales.Dim_Item add CONSTRAINT PK_Dim_Item PRIMARY KEY NONCLUSTERED (ItemID) NOT ENFORCED
GO
3 . [Schemas]フォルダーの[...]をクリックします。
4 . [Refresh]をクリックします。
5 . [Schemas] - [Sales]- [Tables]と移動します。作成した[Dim_Customer]、[Dim_Item]、および[Fact_Sales]テーブルを確認できます。
6 . [新規SQLクエリ] をクリックし新しいエディタを開きます。以下クエリをコピーして実行します。
CREATE VIEW Sales.Staging_Sales
AS
SELECT * FROM [<your lakehouse name>].[dbo].[staging_sales];
7 . [Schemas] - [Sales]- [Views]と移動します。[Staging_Sales]ビューを確認します。
3-6 ウェアハウスへのデータの読み込み
ファクト テーブルとディメンション テーブルが作成されました。レイクハウスからウェアハウスにデータを読み込むストアド プロシージャを作成しましょう。
レイクハウス作成時に作成される自動 SQL エンドポイントを利用することにより、T-SQL クエリとクロスデータベース クエリを使用して、ウェアハウスからレイクハウス内のデータに直接アクセスできます。
このケース スタディでは、顧客名と品目名を主キーとして使用します。
1 . [新規SQLクエリ] をクリックし新規エディタを作成します。以下クエリをコピーし、[実行]をクリックします。
CREATE OR ALTER PROCEDURE Sales.LoadDataFromStaging (@OrderYear INT)
AS
BEGIN
-- Load data into the Customer dimension table
INSERT INTO Sales.Dim_Customer (CustomerID, CustomerName, EmailAddress)
SELECT DISTINCT CustomerName, CustomerName, EmailAddress
FROM [Sales].[Staging_Sales]
WHERE YEAR(OrderDate) = @OrderYear
AND NOT EXISTS (
SELECT 1
FROM Sales.Dim_Customer
WHERE Sales.Dim_Customer.CustomerName = Sales.Staging_Sales.CustomerName
AND Sales.Dim_Customer.EmailAddress = Sales.Staging_Sales.EmailAddress
);
-- Load data into the Item dimension table
INSERT INTO Sales.Dim_Item (ItemID, ItemName)
SELECT DISTINCT Item, Item
FROM [Sales].[Staging_Sales]
WHERE YEAR(OrderDate) = @OrderYear
AND NOT EXISTS (
SELECT 1
FROM Sales.Dim_Item
WHERE Sales.Dim_Item.ItemName = Sales.Staging_Sales.Item
);
-- Load data into the Sales fact table
INSERT INTO Sales.Fact_Sales (CustomerID, ItemID, SalesOrderNumber, SalesOrderLineNumber, OrderDate, Quantity, TaxAmount, UnitPrice)
SELECT CustomerName, Item, SalesOrderNumber, CAST(SalesOrderLineNumber AS INT), CAST(OrderDate AS DATE), CAST(Quantity AS INT), CAST(TaxAmount AS FLOAT), CAST(UnitPrice AS FLOAT)
FROM [Sales].[Staging_Sales]
WHERE YEAR(OrderDate) = @OrderYear;
END
2 . [新規SQLクエリ] をクリックし新規エディタを作成します。以下クエリをコピーし、[実行]をクリックします。
EXEC Sales.LoadDataFromStaging 2021
上記は2021 年のデータのみをロードしています。ただし、前年のデータを読み込むように変更することもできます。
3-7 分析クエリの実行
ウェアハウス内のデータを検証するために、いくつかの分析クエリを実行してみます。
1 . [新規SQLクエリ] をクリックし新規エディタを作成します。以下クエリをコピーし、[実行]をクリックします。
SELECT c.CustomerName, SUM(s.UnitPrice * s.Quantity) AS TotalSales
FROM Sales.Fact_Sales s
JOIN Sales.Dim_Customer c
ON s.CustomerID = c.CustomerID
WHERE YEAR(s.OrderDate) = 2021
GROUP BY c.CustomerName
ORDER BY TotalSales DESC;
このクエリは、2021 年の総売上高別に顧客を示しています。指定した年の総売上高が最も高い顧客は Jordan Turner で、総売上高は 14686.69 です。
2 . [新規SQLクエリ] をクリックし新規エディタを作成します。以下クエリをコピーし、[実行]をクリックします。
SELECT i.ItemName, SUM(s.UnitPrice * s.Quantity) AS TotalSales
FROM Sales.Fact_Sales s
JOIN Sales.Dim_Item i
ON s.ItemID = i.ItemID
WHERE YEAR(s.OrderDate) = 2021
GROUP BY i.ItemName
ORDER BY TotalSales DESC;
このクエリは、2021 年の総売上高で上位のアイテムを示しています。これらの結果から、2021年にブラックとシルバーのカラーリングを合わせたバイクモデル「Mountain-200」が、顧客の間で最も人気の高いアイテムであったことが示唆されます。
3 . [新規SQLクエリ] をクリックし新規エディタを作成します。以下クエリをコピーし、[実行]をクリックします。
WITH CategorizedSales AS (
SELECT
CASE
WHEN i.ItemName LIKE '%Helmet%' THEN 'Helmet'
WHEN i.ItemName LIKE '%Bike%' THEN 'Bike'
WHEN i.ItemName LIKE '%Gloves%' THEN 'Gloves'
ELSE 'Other'
END AS Category,
c.CustomerName,
s.UnitPrice * s.Quantity AS Sales
FROM Sales.Fact_Sales s
JOIN Sales.Dim_Customer c
ON s.CustomerID = c.CustomerID
JOIN Sales.Dim_Item i
ON s.ItemID = i.ItemID
WHERE YEAR(s.OrderDate) = 2021
),
RankedSales AS (
SELECT
Category,
CustomerName,
SUM(Sales) AS TotalSales,
ROW_NUMBER() OVER (PARTITION BY Category ORDER BY SUM(Sales) DESC) AS SalesRank
FROM CategorizedSales
WHERE Category IN ('Helmet', 'Bike', 'Gloves')
GROUP BY Category, CustomerName
)
SELECT Category, CustomerName, TotalSales
FROM RankedSales
WHERE SalesRank = 1
ORDER BY TotalSales DESC;
このクエリの結果は、各カテゴリーのトップの顧客を示しています: バイク、ヘルメット、グローブ。例えば、Joan ColemanはGlovesカテゴリーのトップ顧客です。
以上で演習は終了になります。
この演習では以下を学びました。
- レイクハウスと複数のテーブルを持つデータ ウェアハウスを作成しました。
- データを取り込み、クロスデータベースクエリを使用してレイクハウスからウェアハウスにデータをロードしました。
- クエリ ツールを使用して分析クエリを実行しました。
3-8 リソースをクリーンアップする
1 . 左側のメニューバーの[ワークスペース] - [作成したワークスペース]の[...]メニューから[ワークスペースの設定]をクリックします。
2 . [全般]タブ内の[このワークスペースを削除する]をクリックします。
3 . [削除]をクリックします。
4 . ワークスペースが削除されたことを確認します。
お疲れ様でした!
本演習を通じて Microsoft Fabric の演習 が一覧化されていることを初めて知りましたので共有致します。