🧩 実務で困ったこと
Redash のクエリから BigQuery に対して
- テーブルを作成する(CREATE TABLE AS SELECT ...)
- Cloud Storage にエクスポートする(EXPORT DATA)
といった書き込み系の処理を走らせたいことがあります。
ただし実務だといきなり書き込むのは怖いので、Redash の結果画面で出力内容を確認し、問題なければ本番テーブルや GCS に 書き込むようにしたいです。
しかし Redash のクエリは、クエリを開くだけで実行されるため、意図しないタイミングで書き込み処理が走るリスクがあります。
そこで、Redash クエリ1本で「プレビュー」と「本番書き込み」を切り替えたい
というのが今回のテーマです。
🧮 最終的に採用した方法
やることはシンプルです。
- Redash のクエリパラメータに
DEBUGフラグ(true/false)を用意する - BigQuery のスクリプト内で
IFを使って処理を分岐させる
DEBUG = trueのとき → 結果だけ SELECT(プレビュー)
DEBUG = FALSEのとき → テーブル作成 / EXPORT など書き込み実行
という形にします。
サンプルクエリ
DECLARE __debug BOOLEAN DEFAULT {{DEBUG}};
IF __debug THEN
-- ✅ プレビュー(クエリ結果だけ返す)
SELECT "a" AS preview_result;
ELSE
-- 🚀 本番書き込み(CREATE TABLE / EXPORT など)
-- CREATE OR REPLACE TABLE `project.dataset.table` AS
-- SELECT ...
SELECT "b" AS write_result;
END IF;
これで、DEBUG=true のまま開いても書き込みが走らないため、安心してロジック確認ができるようになります。
📝 補足(運用上の注意)
Redash クエリから直接テーブル作成や Cloud Storage 出力を行う場合、
クエリ変更や実行タイミングの影響を受けやすく、
意図せず内容が更新される
ダッシュボード経由で勝手に実行される
ロジック変更が即 “本番に反映” される
といったリスクがあります。
そのため、Redash クエリで書き込み系処理を扱う場合は、
一時的に利用するテーブルや GCS パス
用途が限定された小さな処理
にとどめておくことを個人的にはおすすめします。
📝 補足(運用上の注意)
Redash クエリから直接テーブル作成や Cloud Storage 出力を行う場合、クエリ変更や実行タイミングの影響を受けやすく、
- 意図せず内容が更新される
- ロジック変更が即 “本番に反映” される
といったリスクがあります。そのため、Redash クエリで書き込み系処理を扱う場合は、
- 一時的に利用するテーブルや GCS パス
- 用途が限定された小さな処理
にとどめておくのを個人的にはおすすめします。
##⚠️ DEBUG フラグに関する注意
Redash では クエリ保存時のパラメータ値がそのまま保持されます。
一度 DEBUG = false(本番書き込み)に切り替えて保存すると次回クエリを開いたときも DEBUG = false のまま実行されます。
そのため、
- デフォルト値を DEBUG = true にする
- 書き込みを行う直前だけ false に変える
- 書き込み終了後は true に戻してからクエリ保存する(パラメータが保持される)
といった運用にしておくと安全です。