対象:✅Microsoft Fabric の SQL データベース
このチュートリアルでは、Fabric Git 統合ソース管理を使用して、Fabric で SQL データベースを操作する方法について説明します。
Microsoft Fabric の SQL データベースにはソース管理統合 ("git 統合") があるため、ユーザーはデータベース オブジェクトの定義を時間の経過と同時に追跡できます。 この統合により、チームで以下を実現できます。
- データベースをソース管理にコミットします。これにより、ライブ データベースが構成されたソース管理リポジトリ (Azure DevOps など) のコードに自動的に変換されます。
- ソース管理の内容からデータベース オブジェクトを更新します。これにより、データベースに差分変更を適用する前にソース管理リポジトリのコードを検証できます。
Git に慣れていない方のために、おすすめのリソースを次にいくつか示します。
この記事では、Fabric の SQL データベースを使用して開発プロセスを個別または組み合わせて管理できる一連の便利なシナリオについて説明します。
- Fabric SQL データベースをソース管理のコードに変換する
- ソース管理から Fabric SQL データベースを更新する
- ブランチ ワークスペースを作成する
- 1つのブランチの変更を別のブランチにマージする
- デプロイ後スクリプトを使用して静的データを管理する
この記事のシナリオについては、データ公開のエピソードで説明します。 Fabric でのソース管理統合の概要に関するビデオをご覧ください。
注記
現時点では、照合順序や互換性レベルなどのデータベース レベルの設定は、ソース管理とデプロイ パイプラインの統合には含まれていません。 データベースの作成後に T-SQL を使用して設定できるデータベース設定の場合は、デプロイ後にスクリプトを使用してデータベースを変更できます。
前提条件
- 既存の Fabric 容量が必要となります。 そうでない場合は、Fabric 試用版を開始します。
- Git 統合テナント設定が有効になっていることを確認してください。
- 新しいワークスペースを作成するか、既存の Fabric ワークスペースを使います。
- Fabric で SQL データベースを作成するか、既存のものを使います。 まだない場合は、新しい Fabric SQL データベースを作成します。
- 省略可能: VS Code の Visual Studio Code、MSSQL 拡張機能、および SQL プロジェクト 拡張機能をインストールします。
セットアップ
このリポジトリ接続はワークスペース レベルで適用され、リポジトリ内の 1 つのブランチがそのワークスペースに関連付けられます。 リポジトリには複数のブランチを含めることができますが、ワークスペース設定で選択されているブランチ内のコードのみがワークスペースに直接影響します。
ワークスペースをソース管理リポジトリに接続する手順については、Git 統合の概要に関する記事を参照してください。 ワークスペースは、Azure DevOpsまたはGitHubのリモートリポジトリに接続できます。
ソース管理に Fabric SQL データベースを追加する
このシナリオでは、データベース オブジェクトをソース管理にコミットします。 アプリケーションを開発する際に、テスト データベース内に直接オブジェクトを作成して、アプリケーション コードと同様にソース管理でそのデータベースを追跡するという場合が考えられます。 その結果、データベース オブジェクト定義の履歴にアクセスでき、分岐やマージなどの Git の概念を使用して開発プロセスをカスタマイズできます。
- Fabric SQL エディター、SQL Server Management Studio、 Visual Studio Code の MSSQL 拡張機能、またはその他の外部ツールで、SQL データベースに接続します。
- データベースに新しいテーブル、ストアド プロシージャ、その他のオブジェクトを作成します。
- [ソース管理] ボタンを選択して、ソース管理パネルを開きます。
- 目的のデータベースの横にあるチェックボックスをオンにします。 「コミット」を選択します。 Fabric サービスは、データベースからオブジェクト定義を読み取り、リモート リポジトリに書き込みます。
- これで、コード リポジトリのソース ビューでデータベース オブジェクトの "履歴" を表示できるようになりました。
既存のオブジェクトの編集を含め、データベースの編集を続ける場合は、前の手順に従ってそれらの変更をソース管理にコミットします。
SQL プロジェクト ファイル
ソース管理リポジトリの SQL プロジェクト ファイルには、データベースに関するメタデータが含まれています。 ファブリック ソース管理統合では、このファイルを使用して、ソース管理とデプロイ パイプラインにより多くの機能が導入されます。 ファブリック ソース管理統合により、プロジェクト ファイルが自動的に生成および更新されます。 プロジェクト ファイルに対する編集は、Fabric からの次のコミットで Fabric ソース管理統合によって上書きされるため、プロジェクト ファイルへの手動編集は避けてください。 ただし、SQL Server Management Studio や Visual Studio Code の SQL プロジェクト拡張機能などの SQL ツールを使用して SQL プロジェクトをローカルにビルドする場合は、プロジェクト ファイル内の master.dacpac ファイルへの参照を追加できます。
Fabric と SQL プロジェクトの統合により、次のメタデータ プロパティがプロジェクト ファイルに追加されます。
-
.sharedQueriesフォルダーをデータベース プロジェクトビルドから除外します。 この除外により、データベース モデルの検証に影響を与えることなく、ソース管理のスクリプトを追跡できます。 - .sharedQueries フォルダーからの配置前および配置後のスクリプト
- master.dacpac ファイルへのパッケージ参照としてのシステム オブジェクト参照
システム オブジェクト参照機能は、アクションを必要とせず、自動的に設定されます。 Fabric クエリ エディターは、 共有クエリ フォルダーの下にデプロイ前および配置後のスクリプトを提供します。
ソース管理から Fabric SQL データベースを更新する
このシナリオでは、Visual Studio Code の SQL プロジェクト拡張機能でコードとしてデータベース オブジェクトを作成し、ソース管理統合から Fabric SQL データベースを更新する前にファイルをソース管理にコミットします。 このシナリオは、Visual Studio Code で作業することを好む開発者、SQL プロジェクトを使用する既存のアプリケーション、またはより高度な CI/CD パイプライン要件を持つ開発者を対象としています。
- Visual Studio Code の最新リリースと、Visual Studio Code 用の MSSQL および SQL プロジェクト拡張機能をインストールしてください。
- ワークスペースに新しい SQL データベースを作成し、オブジェクトを追加せずにソース管理にコミットします。 この手順では、空の SQL プロジェクトと SQL データベース項目のメタデータをリポジトリに追加します。
- ソース管理リポジトリをローカル コンピューターにクローンします。
- Azure DevOpsを使用している場合は、ソース管理プロジェクトの
...コンテキスト メニューを選択します。 Clone を選択して、Azure DevOps リポジトリをローカル コンピューターにコピーします。 Azure DevOpsを初めて使用する場合は、Azure DevOpsの Code with git ガイドを参照してください。 - GitHubを使用している場合は、リポジトリの Code ボタンを選択し、URL をコピーしてリポジトリをローカル コンピューターに複製します。 GitHubを初めて使用する場合は、リポジトリの作成ガイドを参照してください。
- Azure DevOpsを使用している場合は、ソース管理プロジェクトの
- Visual Studio Codeで複製したフォルダーを開きます。 ワークスペースに関連付けられているブランチは、既定ではない可能性があります。 ブランチを切り替えた後、Visual Studio Code に
<yourdatabase>.SQLDatabaseという名前のフォルダーが表示されます。 - データベースのフォルダー構造内のデータベースに作成する少なくとも 1 つのテーブルに対して、
.sqlファイルを作成します。 そのファイルには、テーブルのCREATE TABLEステートメントが含まれている必要があります。 たとえば、以下の内容を含むMyTable.sqlという名前のファイルをdbo/Tablesフォルダーに作成します。CREATE TABLE dbo.MyTable ( Id INT PRIMARY KEY, ExampleColumn NVARCHAR(50) ); - 構文が有効であることを確認するには、SQL プロジェクトを使用してデータベース モデルを検証します。 ファイルを追加した後、Visual Studio Code の [データベース プロジェクト] ビューを使用してプロジェクトを ビルド します。
- ビルドが成功したら、Visual Studio Code のソース管理ビューまたは優先するローカル Git インターフェイスを使用して、ファイルをソース管理に コミット します。
- コミットをリモート リポジトリにプッシュ/同期します。 新しいファイルが Azure DevOps または GitHub に表示されることを確認します。
- Fabric Web インターフェイスに戻り、ワークスペースの [ソース管理] パネルを開きます。 "Git からの保留中の変更があります" というアラートが既に発生している場合があります。
[更新 (すべて更新)] ボタンを選択して、SQL プロジェクトのコードをデータベースに適用します。
- 更新後、データベースが "コミットされていない" ことがすぐに示される場合があります。 この状態は、Git 統合機能が項目定義に対して生成されたすべてのファイル コンテンツを直接比較し、意図しない違いが生じる可能性があるために発生します。 1 つの例は、列のインライン属性です。 このような場合は、Fabric Web インターフェイスのソース管理にコミットし直して、コミット操作の一部として生成されたものと定義を同期する必要があります。
- 更新が完了したら、選択したツールを使用してデータベースに接続します。 SQL プロジェクトに追加したオブジェクトは、データベースに表示されます。
注記
ローカル SQL プロジェクトに変更を加えたときに、Fabric で構文エラーまたはサポートされていない機能の使用が発生した場合、データベースの更新は失敗します。 ソース管理で手動で変更を元に戻してから続行する必要があります。
ソース管理から Fabric の SQL データベースを更新すると、SQL プロジェクトのビルドと SqlPackage 発行操作が組み合わせられます。 SQL プロジェクト ビルドでは、SQL ファイルの構文が検証され、.dacpac ファイルが生成されます。 SqlPackage 発行操作では、 .dacpac ファイルと一致するようにデータベースを更新するために必要な変更が決定されます。 ファブリック インターフェイスの合理化された性質のため、SqlPackage 発行操作には次のオプションが適用されます。
/p:ScriptDatabaseOptions = false/p:DoNotAlterReplicatedObjects = false/p:IncludeTransactionalScripts = true/p:GenerateSmartDefaults = true
Visual Studio Code、SQL Server Management Studio、またはその他の SQL プロジェクト ツールで編集するために、ソース管理された SQL プロジェクトをローカル コンピューターに複製することもできます。 ソース管理にコミットする前に、SQL プロジェクトをローカルでビルドして変更を検証します。
ブランチ ワークスペースを作成する
このシナリオでは、Fabric にソース管理定義に基づいて重複するリソース セットを作成することで、Fabric で新しい開発環境を設定します。 重複するデータベースには、ソース管理にチェックインしたデータベース オブジェクトが含まれます。 このシナリオは、Fabric でアプリケーション開発ライフサイクルを継続し、Fabric からのソース管理統合を利用している開発者を対象としています。
- 「Fabric SQL データベースをソース管理のコードに変換する」のシナリオを完了してください。
- SQL プロジェクトと Fabric オブジェクトのメタデータの両方を含むソース管理リポジトリのブランチが必要です。
- Fabric ワークスペースで、ソース管理パネルを開きます。 [ソース管理] メニューの [ブランチ] タブで、[新しいワークスペースへの分岐] を選択します。
- 作成するブランチとワークスペースの名前を指定します。 ブランチはソース管理リポジトリに作成され、分岐元のワークスペースに関連付けられているブランチのコミット済みコンテンツが設定されます。 ワークスペースは Fabric で作成されます。
- Fabric で新しく作成されたワークスペースに移動します。 データベースの作成が完了すると、新しく作成されたデータベースには、コード リポジトリで指定されたオブジェクトが含まれています。 Fabric クエリ エディターを開き、[オブジェクト エクスプローラー] で移動すれば、データベースには新しい (空の) テーブルとその他のオブジェクトが含まれていることがわかります。
1つのブランチから別のブランチに変更をマージする
このシナリオでは、ソース管理リポジトリを使用して、データベースの変更をデプロイに使用できるようになる前に確認します。 このシナリオは、チーム環境で作業していて、ソース管理を使用してデータベースの変更を管理している開発者を対象としています。
前のシナリオで説明したように、同じリポジトリに関連付けられたブランチを持つ 2 つのワークスペースを作成します。
- セカンダリ ブランチのデータベースを使って、データベース オブジェクトに変更を加えます。
- たとえば、既存のストアド プロシージャを変更したり、新しいテーブルを作成したりします。
- Fabric のソース管理パネルの [コミット ] ボタンを使用して、ソース管理に対するこれらの変更をチェックインします。
- Azure DevOpsまたはGitHubで、セカンダリ ブランチからプライマリ ブランチへのプル要求を作成します。
- pull request では、プライマリ ワークスペースとセカンダリ ワークスペース間でのデータベース コードの変更を確認できます。
- pull request を完了すると、ソース管理は更新されますが、プライマリ ワークスペースでの Fabric のデータベースは変更されません。 プライマリ データベースを変更するには、Fabric のソース管理パネルの [更新] ボタンを使って、ソース管理からプライマリ ワークスペースを更新します。
デプロイ後スクリプトを使用して静的データを管理する
このシナリオでは、ソース管理を使用して、データベース内の参照テーブル内の行を制御します。 この機能(デプロイ前スクリプトとデプロイ後スクリプト)を有効にする機能はデプロイ パイプラインにも適用されるため、同じスクリプトを使用して両方のシナリオで静的データを管理できます。
ソース管理に接続されている Fabric の SQL データベースから、静的データを管理するテーブルを特定または作成します。 たとえば、アプリケーションで使用され、頻繁に変更されない既知の値のセットを持つ
dbo.Colorsテーブルがあるとします。Fabric の SQL データベース エディターで新しいクエリを作成 します 。 クエリ エディターで、
MERGEステートメントを追加して、Colorsテーブルの内容を管理します。 例えば次が挙げられます。MERGE dbo.Colors AS target USING (VALUES (1, 'Red'), (2, 'Green'), (3, 'Blue') ) AS source (Id, Name) ON target.Id = source.Id WHEN MATCHED THEN UPDATE SET Name = source.Name WHEN NOT MATCHED BY TARGET THEN INSERT (Id, Name) VALUES (source.Id, source.Name) WHEN NOT MATCHED BY SOURCE THEN DELETE;クエリの名前を に
Post-Deployment-StaticData.sqlし、共有クエリに移動します。[共有クエリ] で、クエリの [... ] メニューを選択し、[ 配置後スクリプトとして設定] を選択します。
このクエリは、ソース管理またはデプロイ パイプラインのデプロイからの更新の一部として自動的に実行されるため、ソース管理を使用して Colors テーブル内の静的データを管理できます。 Fabric クエリ エディターでクエリを編集し、ソース管理に変更をコミットして、時間の経過に伴う静的データへの変更を管理できます。 さらに、配置前スクリプトと配置後スクリプトは SQL プロジェクトに含まれているため、Visual Studio Code やその他の SQL プロジェクト ツールを使用してローカル コンピューターからクエリを編集し、それらの変更をソース管理にコミットすることもできます。 デプロイ前と配置後のスクリプトの詳細については、 SQL プロジェクトのドキュメントを参照してください。