2
1

More than 1 year has passed since last update.

Azure Purview で Azure SQL Database からストアドプロシージャの Lineage を抽出する

Posted at

はじめに

Azure Purview では、Azure Data Factory や Azure Synapse Analytics などからスキャンしたデータの遷移情報を、Lineage という機能で可視化できます。

その Lineage 機能が強化され、Azure SQL Database で実行されるストアドプロシージャの情報も可視化できるようになりました(2022 年 4 月現在プレビュー中)。
Introducing dynamic lineage extraction from Azure SQL Databases in Azure Purview

Microsoft の発表によると、下記のようなストアドプロシージャを実行した際の動的なメタデータを、Azure Purview で Lineage として表示できるようです。

  • 実行状況
  • クエリの影響を受けた行数
  • ストアドプロシージャが実行されたクライアント
  • ユーザ情報など

今回は、Azure SQL Database 上でストアドプロシージャを実行し、その結果を Azure Purview でスキャンして Lineage として表示されるか検証しました。

想定読者

  • Azure Purview に Azure SQL Database のデータをスキャンした経験がある方
  • Azure SQL Database でストアドプロシージャを作成・実行した経験がある方

上記のご経験がない場合は、下記のドキュメントを参照いただけると、以降の作業イメージが掴みやすいかと思います。
Azure Purview の Azure SQL Database のデータベースに接続する
ストアド プロシージャの作成

前提条件

Azure SQL Database で実行したストアドプロシージャを Lineage 表示する前提条件として、下記の全てを満たしている必要があります。

  • Azure SQL Database で Azure AD 認証が構成されている
  • Azure Purview で Azure SQL Database のデータスキャンを作成する際に、マネージド ID による認証を構成する
    • 本検証ではシステム割り当てマネージド ID による認証を構成
    • 参考:スキャンの認証
  • Azure AD アカウントを使用して Azure SQL Database にサインインし、Purview マネージド ID にアクセス許可を割り当て、DB マスターキーを作成する

Lineage 抽出を有効にしたスキャンの作成

Azure Purview Studio のデータマップから、Azure SQL Database のコレクションを参照し、「新しいスキャン」を選択します。
Linege_1.png

スキャンの設定画面が表示されるので、下記の通り設定します。

  • データベース名:前提条件を満たす Azure SQL Database サーバを入力
  • 資格情報:Azure Purview MSI(システム)(マネージド ID による認証を構成した場合)
  • 系列の抽出:オン

注意点として、「系列の抽出」の項目をオンにしたスキャンは Purview アカウントにつき 1 つしか作成できません(2022 年 4 月現在)。
「接続のテスト」を選択すると、Azure SQL Database の認証が正しく設定されているか検証されます。

「接続のテスト」に成功したことを確認し、「続行」を選択します。
Linege_2.png

スキャン対象となる Azure SQL Database のテーブルを選択し、「続行」を選択します。
Linege_3.png

スキャンルールセットを選択し、「続行」を選択します。
本検証では、デフォルトで表示されるAzureSqlDataWarehouseを使用します。
Linege_4.png

スキャンのトリガーを選択します。
「定期的」ではスキャンのスケジューリングが可能ですが、今回の検証では「一度だけ」に設定し「続行」を選択します。
Linege_5.png

スキャンの設定情報を確認し、「保存して実行」を選択します。
Linege_7.png

なお、スキャン対象の DB マスターキーが作成されていない場合、下記のメッセージが表示され、スキャンの保存および実行ができません。
Master key must be updated or created before lineage can be collected from the Azure SQL Database
Linege_6.png

この段階では、既に Azure SQL Database 上に実行済みのストアドプロシージャがあったとしても、その Lineage は表示されません。

ドキュメントを参照すると下記の記述があるため、スキャン作成後にストアドプロシージャを実行する必要があります。
系列がキャプチャされるのは、正常にスキャンが設定された後に行われたストアド プロシージャの実行に対してです。 過去のストアド プロシージャ実行からの系列はキャプチャされません。
Lineage 抽出におけるトラブルシューティング

Azure SQL Database でのストアドプロシージャ作成・実行

本検証では、SQL Server Management Studio(SSMS)を使用して Azure SQL Database 上にストアドプロシージャを作成し実行しました。
SQL Server Management Studio を使用したストアドプロシージャの作成

検証の目的は Lineage 表示の確認のため、ストアドプロシージャはパラメータの指定等を行わず、テーブル内のデータをSELECTするだけの単純なものとしました。

SelectTestData.sql
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SelectTestData]
AS
BEGIN
    SET NOCOUNT ON
    SELECT *
    FROM dbo.PurchaseOrderDetail
END;

なお、データを取得するPurchaseOrderDetailテーブルは、Microsoft ドキュメント内のサンプルを流用し、テストデータは筆者が入力しました。

PurchaseOrderID LineNumber ProductID UnitPrice OrderQty ReceivedQty RejectedQty DueDate
1 1 1 1000.00 10 10 0 2022-01-01 00:00:00.000
2 2 2 2000.00 20 20 0 2022-01-02 00:00:00.000
3 3 3 3000.00 30 30 0 2022-01-03 00:00:00.000

上記のストアドプロシージャを SSMS にて作成・実行し、想定通りPurchaseOrderDetailテーブルのデータがすべて参照されることを確認しました。
Linege_8.png

ここまでで、Azure Purview で Azure SQL Database 上のストアドプロシージャを Lineage 表示する準備が整いました。

Lineage 表示の確認

再度 Azure Purview Studio に戻り、Azure SQL Database のアセットを確認すると、先ほど実行したストアドプロシージャ[dbo].[SelectTestData]が含まれています。
Linege_9.png

[dbo].[SelectTestData]のアセットを選択し、「系列」のメニューを確認すると、PurchaseOrderDetailテーブルに紐づいたストアドプロシージャであることが確認できます。
Linege_10.png

さらに、「プロパティ」のメニューから「関連するアセット」を選択すると、ストアドプロシージャ実行時の動的なメタデータを確認できます。
Linege_11.png
Linege_12.png

Lineage 表示が可能なストアドプロシージャ実行

今回は単純にSELECTを行うだけのストアドプロシージャを実行し、Lineage 表示を確認しましたが、ドキュメントを確認する限りでは、テーブルあるいは DB 間のデータコピーといった処理も Lineage 抽出できるようです。
Azure SQL Database アセットを検索し、ランタイムの系列を表示する

一方で、下記の注意点も記載されています。
データベースで、ストアド プロシージャが何度も実行される大量のワークロードを処理している場合は、最新の実行だけがフィルター処理されます。 6 時間の時間枠内の早い段階で実行されるストアド プロシージャや、高いクエリ負荷を作成する実行インスタンスは抽出されません。 ストアド プロシージャの実行からの系列が見つからない場合は、サポートにお問い合わせください。

この中で、高いクエリ負荷を作成する実行インスタンスは、Lineage 抽出されないという記載は若干抽象的です。

そのため、現段階ではストアドプロシージャ実行による負荷がどの程度であれば Lineage として抽出可能なのか、ユーザ側で判断する必要がありそうです。

まとめ

今回は、Azure Purview にて Azure SQL Database 上で実行されたストアドプロシージャを Lineage 表示するプレビュー機能を検証しました。

認証や DB マスターキーの作成など、Azure SQL Database 周りの前提条件はありますが、ストアドプロシージャの実行情報やデータの流れを視覚的に把握できる便利な機能かと思います。

Azure Purview の Lineage 表示に対応するサービスは、リリースから拡充し続けているため、今後も注視していく予定です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1