この記事では、Visual Studio Codeの SQL データベース プロジェクトを使用して、クロスウェアハウス依存関係をモデル化してデプロイする方法について説明します。 既存の2つのウェアハウスプロジェクトから始め、データベース参照を使って一方向依存関係を設定します。
この記事は、 Visual Studio Code での倉庫プロジェクトの開発に関する概念に基づいており、1 つのウェアハウス プロジェクトの構築と発行に既に慣れているものとします。
[前提条件]
開始する前に、次のことを確認してください。
- 同じワークスペースに 2 つの Fabric Warehouse を作成します。
- 新しいサンプル ウェアハウスを作成するには、「
Microsoft Fabric を参照してください。
- 新しいサンプル ウェアハウスを作成するには、「
- Visual Studio Code内の各ウェアハウスのdatabase プロジェクトを作成または抽出します。
- 既存の倉庫または新しい倉庫のデータベース プロジェクトを作成するには、
Visual Studio Code を参照してください。
- 既存の倉庫または新しい倉庫のデータベース プロジェクトを作成するには、
- ワークステーションにVisual Studio Codeをインストールします。
- .NET SDK をインストールして、データベース プロジェクトをビルドして発行します。
-
SQL データベース プロジェクト と SQL Server (mssql) の 2 つのVisual Studio Code拡張機能をインストールします。
- 必要な拡張機能は、"SQL Database Projects" または "SQL Server (mssql)" を検索することで、Visual Studio Code マーケットプレース内から直接インストールできます。
- ウェアハウス プロジェクトは検証、ビルド、およびVisual Studio Codeで発行できます。
注
この記事では、Visual Studio Codeの warehouse プロジェクトと、それらを通常のコード プロジェクトとして Git でバージョン管理する方法について説明します。 ワークスペースおよび倉庫アイテム向けのFabric Git統合は、開発・デプロイおよびGit統合で別途扱われています。 この記事は、Fabricワークスペースがデプロイメントのターゲットであり、T-SQLスキーマがGitでバージョン管理を行う1つ以上のVisual Studio Codeプロジェクトに存在していると仮定しています。
この記事では、Lakehouse の SQL 分析エンドポイントのクロスウェアハウス開発については説明しません。 Lakehouse テーブルと SQL 分析エンドポイント オブジェクトは、ウェアハウス プロジェクトと同じように、ソース管理のオブジェクトを追跡しません。 Fabric ネイティブ エクスペリエンスとクライアント ツールで完全な Git 統合とデプロイのサポートを行うには、データベース プロジェクトで Warehouse 項目を使用します。
シナリオ: Zava Analytics クロスドメイン ウェアハウス
Zava Analytics では、次の 2 つのビジネス ドメインが使用されます。
- Sales – 顧客の注文、収益、パイプラインのメトリック。
- マーケティング – キャンペーン、チャネル、エンゲージメント メトリック。
各ドメインには次の内容があります。
同じワークスペース内の ファブリック ウェアハウス :
ZavaSalesWarehouseZavaMarketingWarehouse
Visual Studio Codeの database プロジェクト:
Zava.Sales.WarehouseZava.Marketing.Warehouse
エンド ツー エンドの ELT とレポートを作成するには、各ドメインが他のドメインのデータにアクセスするための 読み取り専用ビュー が必要です。
-
Sales顧客によるマーケティングエンゲージメントを必要とします。 -
Marketingはキャンペーン別の販売実績を必要とします。
以下を実行する必要があります。
- データベース参照を使用して 、一方向のクロスウェアハウス依存関係 を確立します。
- 循環依存関係を回避します。
倉庫間の依存関係が一方向であることを確認する
倉庫のペアごとに、 論理依存関係の方向を選択します。
例:
-
Salesは、エンゲージメント データのMarketingに依存します。 -
Marketingは、Salesに必要なオブジェクトのに依存しません。
実際に:
Zava.Sales.Warehouseには、へのZava.Marketing.Warehouseがあります。
-
Salesウェアハウスの T-SQL では、次のような 3 つの部分から構成される名前を使用できます。SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehouseは、デプロイ時依存関係サイクルを強制するオブジェクトを参照Sales。
ヒント
倉庫のペアごとに、単純な矢印図 (Sales → Marketing) を描画します。
同じ種類のオブジェクトに対して矢印が両方向を指している場合は、設計をリファクタリングして一方方向依存性を復元してください。
循環依存関係を回避する
循環依存関係は、1 つのデプロイでエンジンが解決できない方法で、倉庫 A と倉庫 B の両方が相互に依存している場合に発生します。
問題の例 (これを行わないでください):
-
ZavaSalesWarehouse.dbo.CustomerRollupビュー:CREATE VIEW dbo.CustomerRollup AS SELECT c.CustomerId, c.TotalRevenue, m.LastCampaignId FROM dbo.CustomerRevenue AS c LEFT OUTER JOIN ZavaMarketingWarehouse.dbo.CustomerEngagement AS m ON c.CustomerId = m.CustomerId; -
ZavaMarketingWarehouse.dbo.CampaignAttributionビュー:CREATE VIEW dbo.CampaignAttribution AS SELECT m.CampaignId, SUM(s.TotalRevenue) AS RevenueAttributed FROM dbo.Campaigns AS m LEFT OUTER JOIN ZavaSalesWarehouse.dbo.CustomerRollup AS s ON m.CampaignId = s.LastCampaignId GROUP BY m.CampaignId;
このアンチパターンでは、次の操作を行います。
-
CustomerRollupin Sales はCustomerEngagementのに依存します。 -
CampaignAttributionマーケティングはCustomerRollupに依存しています。
このアンチパターンでは、売上ビュー→マーケティング ビュー→売上ビューというサイクルが作成されます。
ガイダンス:
ウェアハウス間の 相互依存関係 を通常のスキーマ レベルのオブジェクトとしてモデル化しないでください。 もし本当にこの種のロジックが必要なら、依存関係の 片側 を下流の 意味モデル や レポート に移し、クエリ時に2つのウェアハウスを接続させてください。
データベース参照を通じた直接のクロスウェアハウス参照
このパターンでは、データベース参照を使用して、データベース プロジェクトで一方向の依存関係を直接モデル化します。
手順 1: 2 つの既存の倉庫プロジェクトから開始する
既に次の情報が必要です。
-
Zava.Sales.WarehouseをZavaSalesWarehouseにデプロイ -
Zava.Marketing.WarehouseをZavaMarketingWarehouseにデプロイ
各プロジェクトは、Visual Studio Code で倉庫プロジェクトを開発する の手順を使用して作成または抽出されました。
手順 2: Sales から Marketing にデータベース参照を追加する
- Visual Studio Codeで、Database Projects ビューを開きます。
-
Zava.Sales.Warehouseプロジェクトを右クリックします。 - [ データベース参照の追加...] を選択します。
- 次のいずれかを選択します。
- 現在のワークスペースの Database プロジェクト (この方法で参照されるデータベース プロジェクトもVisual Studio Codeで開く必要があります)、または
-
データ層アプリケーション (.dacpac) (
.dacpacウェアハウス用のビルドMarketingがある場合にビルド済みであることを前提としています)。
- 参照オプションを設定します。
- 参照型: 同じサーバー、異なるデータベース。
-
データベース名または変数:
[$(MarketingWarehouseName)]など、SQLCMD 変数を使用します。
- Sales プロジェクトを保存してリビルドします。
.sqlproj ファイルに、次のようなエントリが表示されます。
<ItemGroup>
<ArtifactReference Include="..\Zava.Marketing.Warehouse\bin\Debug\Zava.Marketing.Warehouse.dacpac">
<DatabaseVariableLiteralValue>$(MarketingWarehouseName)</DatabaseVariableLiteralValue>
</ArtifactReference>
</ItemGroup>
<ItemGroup>
<SqlCmdVariable Include="MarketingWarehouseName">
<DefaultValue>ZavaMarketingWarehouse</DefaultValue>
</SqlCmdVariable>
</ItemGroup>
ヒント
リモート ウェアハウス名に SQLCMD 変数を使用すると、Dev/Test/Prod など、ウェアハウス名が異なる可能性があるすべての環境で同じプロジェクトを再利用できます。
手順 3: Sales でクロスウェアハウス ビューを作成する
Sales プロジェクトで、Marketing ウェアハウスから読み取るビューを追加します。
-- schema/Views/dbo.CustomerEngagementFact.sql
CREATE VIEW [dbo].[CustomerEngagementFact] AS
SELECT
s.CustomerId,
s.TotalRevenue,
m.LatestChannel,
m.LastEngagementDate
FROM dbo.CustomerRevenue AS s
JOIN [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] AS m
ON s.CustomerId = m.CustomerId;
重要なポイント:
- 3 部構成の名前
[$(MarketingWarehouseName)].[dbo].[CustomerEngagement]は、Fabric SQL エディターのクロスウェアハウス クエリに使用される T-SQL パターンと一致します。 - DacFx は、データベース参照を使用して外部データベースを解決 します。
未解決の参照エラー SQL71501がないように、プロジェクトをビルドする。
手順 4: マーケティング ウェアハウスを発行してから Sales を発行する
デプロイの問題を回避するには:
-
ビルドと発行
Zava.Marketing.Warehouseまずは:- ビルド→プロジェクトを右クリックします。
- [ 発行 ] →プロジェクトを右クリック→、[
ZavaMarketingWarehouse] を選択します。
- デプロイ
Marketing成功したら、ビルドして発行しますZava.Sales.Warehouse:- ビルド→プロジェクトを右クリックします。
- [ 発行 ] →プロジェクトを右クリック→、[
ZavaSalesWarehouse] を選択します。
結果のデプロイ フローは次のとおりです。
Zava.Marketing.Warehouse (外部依存関係なし) → Zava.Sales.Warehouse ( Marketingによって異なります)
これで、ZavaSalesWarehouseの T-SQL クエリでは、クロスウェアハウス T-SQL を使用してdbo.CustomerEngagementFact ウェアハウスから内部的に読み取るMarketing ビューを使用できるようになりました。
学び続ける
- このパターンを、ソース管理やCI/CDの開発・展開ガイダンス、Fabric git統合ドキュメントと組み合わせてください。
- デプロイ パイプラインまたは外部 CI/CD を使用して、複数のウェアハウス間で発行順序を調整して、開発 /テスト/Prod 環境を含めるように Zava Analytics シナリオを拡張します。