ストアドプロシージャとは?
BigQueryのストアドプロシージャは、他のクエリやプロシージャから呼び出せるSQLステートメントの集合です。以下のような特徴があります:
- 何度でも使えるSQLのまとまり
- 名前をつけてBigQueryのデータセットに保存できる
- 引数(入力)を受け取り、戻り値(出力)を返すことも可能
-
IF
やLOOP
などの制御構文を使って処理の流れを記述できる - 他のSQLやプロシージャから呼び出して使える
何が便利なの?
用途 | 説明 |
---|---|
再利用 | 複数のユーザーやプロセスで同じ処理を使い回せる |
アクセス制御 | テーブルに直接アクセスさせず、プロシージャ経由で安全に操作できる |
処理の自動化 | UUID生成 → データINSERT → 結果返却などの一連の流れを自動化できる |
セキュリティ | 認可済みルーチンを使えば、データを見せずに処理だけ提供可能 |
ユースケース例
1. 顧客登録処理の共通化
営業部門・マーケティング部門など複数部署が顧客情報を登録する際、同じロジック(UUID生成・重複チェック・INSERT処理)をストアドプロシージャにまとめておけば、一貫性のあるデータ登録が可能になります。
2. データマスキング処理
個人情報を含むテーブルに対して、マスキング処理だけを許可したプロシージャを作成すれば、データの漏洩リスクを減らしつつ、分析用途に活用できます。
3. 定期バッチ処理の自動化
例えば「毎朝9時に前日の売上データを集計して別テーブルに保存する」などの処理をCloud Scheduler + ストアドプロシージャで自動化できます。
作成方法
基本形
CREATE PROCEDURE dataset_name.procedure_name()
BEGIN -- SQL文をここに書く
END;
引数を渡すには?
例:顧客データを追加するプロシージャ
CREATE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END;
呼び出し方
CALL mydataset.create_customer("Alice");
値を戻す(OUTパラメータ)
OUTパラメータ付きの例
CREATE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);END;
呼び出し方
DECLARE my_id STRING;
CALL mydataset.create_customer("Alice", my_id);
SELECT * FROM mydataset.customers WHERE customer_id = my_id;
まとめ
BigQueryのストアドプロシージャは、再利用性・自動化・セキュリティの面で非常に強力な機能です。業務の効率化やデータアクセスの安全性向上に役立つので、ぜひ活用してみてください!