Azure でデータ分析基盤を自動化

  • URLをコピーしました!
目次

はじめに

前回の記事では、Azure Data Factory (ADF)を使って「手動」でデータをコピーする手順を紹介しました。 今回はそれを発展させ、「Blob Storage に CSV を置くだけ」 で自動的にパイプラインが起動し、SQL Database へ取り込む仕組み(イベントトリガー)を構築します。

この記事でわかること
  • ファイルを置くだけ」 で動く自動化パイプラインの構築
  • ADF イベントトリガー(Blob Created)の設定手順
  • ファイル名を動的に受け渡す パラメータ設定 の方法

全体アーキテクチャ

構成は以下のとおり前回と同じです。

STEP
CSV アップロード

ユーザーが Blob Storage の raw/inbox/ にファイルを配置

STEP
イベント検知

ADF の「Storage Event Trigger」がファイルの作成を検知

STEP
パイプライン実行

ADF がデータをコピーし、SQL Database(サーバーレス)へ追記

STEP
可視化

Power BI(DirectQuery)で最新データを表示

導入手順

手順

ストレージ(ADLS Gen2)の準備

まずはデータレイクとなるストレージを作成し、テストデータを配置します。

STEP
ストレージアカウントの作成

Azure ポータルから「ストレージアカウント」を作成します。階層型名前空間(HNS」の有効化が重要です。

  • リソースグループ: rg-lake-demo
  • アカウント名: stlakedemo01
  • リージョン: Japan West
  • 詳細設定: 階層型名前空間(HNS)を「有効」 にする
  • その他: Standard / LRS
STEP
コンテナとフォルダ構成の準備

リソース作成後、CSV を格納するフォルダを作成します。

  • 作成したストレージを開き、左メニュー「コンテナー」へ
  • 「+ コンテナー」 で名前 raw を作成(アクセスレベル: 非公開)
  • raw コンテナの中に、サブフォルダ inbox を作成します。
raw/
 └── inbox/

ユーザーの運用は、この inbox フォルダにファイルをアップロードするだけです。これをトリガーに自動処理が走ります。

手順

SQL Database(サーバーレス)の準備

データの格納先を用意します。コストを抑えるため「サーバーレス」を選択します。

STEP
データベースの作成

Azure ポータルから「SQL データベース」を作成します。

  • DB 名: sqlauto
  • サーバー: 新規作成 sqlsrv-auto01(Japan East)
  • コンピューティング: サーバーレスを選択
  • 自動一時停止: ON(1時間)
STEP
ファイアウォール設定

ADF や自分の PC から接続できるようにします。

  • 概要ページ上部の「サーバーのファイアウォールの設定」をクリック。
  • 「Azure サービスおよびリソースがこのサーバーにアクセスすることを許可」 を ON にします。
  • 「現在のクライアント IP を追加」もクリックして保存します。
STEP
テーブルの作成

「クエリエディター」を開き、以下の SQL を実行してテーブルを作成します。

CREATE TABLE dbo.TableTennisDemo (
  Rally INT,
  [Server] NVARCHAR(50),
  Winner NVARCHAR(50),
  ServeType NVARCHAR(100),
  Outcome NVARCHAR(100),
  Axis NVARCHAR(50),
  SpinClass NVARCHAR(50),
  [Length] NVARCHAR(50),
  Course NVARCHAR(50),
  Contact NVARCHAR(50) NULL,
  SetNumber INT,
  match_id NVARCHAR(50),
  created_at DATETIME2,
  player NVARCHAR(50),
  opponent NVARCHAR(50)
);
STEP
動作確認

テーブルが作成されたか確認します。

SELECT COUNT(*) AS cnt FROM sys.tables WHERE name = 'TableTennisDemo';

結果の cnt1 ならOKです。

手順

Data Factory の構築

ここからパイプラインを作成します。今回は「パラメータ」を使ってファイル名を動的に扱う点がポイントです。

STEP
ADF インスタンス作成

Azure ポータルから「Data Factory」を作成し、ADF Studio(管理画面)を開きます。

  • 名前: adf-lakedemo
  • リージョン: Japan East
STEP
Linked Services(接続設定) 「管理」メニューから2つの接続を作成します。
  1. Azure Data Lake Storage Gen2
    • 名前: ls_adls
    • アカウント: stlakedemo01
  2. Azure SQL Database
    • 名前: ls_sqlauto
    • サーバー: sqlsrv-auto01... / DB:sqlauto
STEP
データセット作成(A. ソース側)

ここが重要です。ファイル名をパラメータ化します。

  • 「データセット」新規作成 → Azure Data Lake Storage Gen2 (DelimitedText)
  • 名前:ds_raw_csv / コンテナ: raw
  • 「パラメータ」タブで以下を追加:
    • folder (String)
    • file (String)
  • 「接続」タブに戻り、ファイルパスの入力欄で「動的なコンテンツ」を選び、以下を設定します。
Directory = @{dataset().folder}
File      = @{dataset().file}
STEP
データセット作成(B. シンク側)
  • 「データセット」新規作成 → Azure SQL Database
  • 名前: ds_sql_tennis
  • テーブル: dbo.TableTennisDemo を選択
STEP
パイプラインの作成
  • 新規パイプライン pl_inbox_to_sql を作成
  • キャンバスの空白部分をクリックし、「パラメータ」タブで以下を追加
    • p_folder (String)
    • p_file (String)
  • 「Copy data」アクティビティを配置し、設定します。
    • ソース: ds_raw_csv
    • データセットプロパティ:
      • folder = @pipeline().parameters.p_folder
      • file = @pipeline().parameters.p_file
  • シンク: ds_sql_tennis
STEP
マッピング修正
  • Copy data の「マッピング」タブを開く。
  • 「スキーマのインポート」をクリックし、パラメータに仮の値を入力して読み込む。
    • p_folderinbox
    • p_filedemodata.csv
  • 列が表示されたら、Set 列を SetNumber に紐付け直します。
  • 最後に左上の「すべて発行」をクリックします。
手順

イベントトリガーの設定

最後に、ファイルが置かれたらパイプラインが動くように設定します。

STEP
トリガーの作成

「管理」→「トリガー」→「+ 新規」をクリックします。

  • 名前: trg_inbox_to_sql
  • 種類: ストレージイベント(Blob created)
  • コンテナ: raw
  • Blob パス末尾: .csv
STEP
パイプラインとの関連付け

「次へ」進み、実行するパイプラインに pl_inbox_to_sql を選択します。 パラメータの設定画面で、トリガーからファイル情報を受け渡す記述を行います。

  • p_file: @{triggerBody().fileName}
  • p_folder: @{triggerBody().folderPath}
フォルダパスの調整

環境によっては folderPathraw/ が含まれてパスがズレる場合があります。その場合は以下のように replace 関数を使います。 @{replace(triggerBody().folderPath, 'raw/', '')}

STEP
有効化と動作確認
  • トリガーを作成し、「すべて発行」します。
  • トリガーの状態が「有効」になっていることを確認します。
  • 実際に raw/inbox/ に新しい CSV をアップロードし、パイプラインが自動起動するか確認しましょう。
手順

Power BI との連携

SQL Database に蓄積されたデータを、Power BI で可視化します。

STEP
DirectQuery で SQL に接続

今回はリアルタイム性を重視し、DirectQuery モードを使用します。

  • Power BI Desktop を起動し、「データの取得」→「Azure SQL Database」を選択。
  • 以下の情報を入力して接続します。
  • サーバー: sqlsrv-auto01.database.windows.net
  • データベース: sqlauto
  • データ接続モード: DirectQuery
STEP
レポート作成

フィールド一覧に dbo.TableTennisDemo テーブルが表示されます。 これらをキャンバスにドラッグ&ドロップして、グラフや表を作成します。

Power BI のリロード(更新)について
  • 手動更新: Power BI Desktop 上部の「更新」ボタンを押すと最新化されます。
  • Auto page refresh: Premium 機能などを使い、数分ごとに自動更新させることも可能です。
  • Import + スケジュール: DirectQuery ではなく「インポート」モードを選んだ場合は、Power BI Service 上で1日8回などのスケジュール更新が設定できます。
手順

動作確認

実際に新しいファイルを置いて、全自動で反映されるかテストします。

STEP
新しい CSV を配置

Storage Explorer や Azure ポータルを使い、raw/inbox/ フォルダに新しいファイル(例:demodata_new.csv)をアップロードします。

参考: demodata_new.csv の中身

Rally,Server,Winner,ServeType,Outcome,Axis,SpinClass,Length,Course,Contact,Set,match_id,created_at,player,opponent
1,Alice,Alice,Forehand,Winner,Right,Topspin,Short,Forehand,None,1,M001,2025-09-30 10:00:00,Alice,Bob
2,Bob,Alice,Backhand,Error,Left,Backspin,Long,Backhand,Edge,1,M001,2025-09-30 10:01:00,Alice,Bob
3,Charlie,Charlie,Reverse sidespin serve,Service ace,Right,Topspin,Half-long,Middle,,2,M002,2025-10-01 09:00:00,Charlie,Dana
4,Dana,Charlie,Vertical-spin serve,Rally won,Left,Non-backspin,Long,Forehand,,2,M002,2025-10-01 09:05:00,Charlie,Dana
STEP
ADF モニターで確認

ADF Studio の「Monitor(監視)」タブを開きます。 ファイルのアップロードを検知してパイプラインが自動起動し、ステータスが Succeeded になっていることを確認します。

STEP
Power BI で最新化を確認

SQL Database 側に行数が増えていることをクエリで確認するか、Power BI の「更新」ボタンを押してグラフが変化することを確認します。

データ削除(クリーンアップ)について

検証を繰り返すとデータが重複してしまいます。 データをリセットしたい場合、以下の2つの方法があります。

方法1: 手動で削除

Azure ポータルの「クエリエディター」から SQL を実行して削除します。

全件削除: テーブルを空にし、ID の連番もリセットします。

TRUNCATE TABLE dbo.TableTennisDemo;

条件削除: 特定の日付以前のデータのみ削除します。

DELETE FROM dbo.TableTennisDemo
WHERE created_at < '2025-09-30';

方法2: ADFで自動削除

ファイルを取り込む前に、自動的に既存データを消す設定です。

ADF パイプラインの「Copy Data」アクティビティの前段に、Script Activity を追加し、以下のクエリを設定します。

TRUNCATE TABLE dbo.TableTennisDemo;

これを組み込んでおくと、常にクリーンな状態で検証できるため、テスト環境では非常に便利です。

まとめ

今回の仕組みにより、ユーザー側は 「CSV をアップロードするだけ」 でデータが自動的に SQL に取り込まれ、Power BI で最新の可視化が可能になりました。メリットは以下のとおりです。

項目メリット
運用コストファイルを置くだけで OK。Functions 等と比較しても保守が容易
導入コストほぼ GUI 操作のみで構築可能。コードレスで短期間導入できる。
拡張性フォルダ追加で他データにも対応可能。API 連携などでさらに高度化も。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

クラウド・ネットワーク・セキュリティ・仮想化・プログラミング・オープンソース・Web 開発をテーマにしたブログを運営👨‍💻 コンシューマー向けエンタメ事業の新規開発・運営経験 / VCAP-DCA・CCIE Lifetime Emeritus 認定 / 技術とビジネス書愛好家📚

目次