前回 EP.01 で「健全な民主化と危険な民主化を区別する」と書きました。本記事では、「とりあえず開放してみた」組織で実際に起きる暴走パターン 5 つを、再現コードと予防策セットで紹介します。先に事故の形を知っておくことがガードレール設計の出発点です。
AP1: 全件スキャンによるコスト爆発
「全顧客のデータを見たい」という素朴な要求が `SELECT * FROM all_orders` に翻訳され、全期間・全カラム・全行をスキャンしてしまう。 なら TB スキャン、 なら クレジット枯渇を一発で起こす。
-- 善意のスタッフが Slack で投げてしまう典型パターンSELECT *FROM events;-- → events が3年分・1兆行・JSON カラム多数 = 数十TBスキャン-- BigQuery で $5/TB なら、このクエリ1本で数百ドル1) maximum_bytes_billed の制限(BigQueryなら job 単位で 10GB 上限など)。2) 必ず `partition column` 必須にする → `WHERE _PARTITIONTIME >= ...` がないとリジェクト。3) `SELECT *` を構造的に禁止(クエリ事前検査で `*` をリジェクト or 警告)。詳細は EP.06。
AP2: 個人情報の Slack リーク
メールアドレスや電話番号を含む生データが Slack の ! クエリ結果として垂れ流される。個人情報保護法・GDPR・PCI DSS の違反になり、会社が監査で指摘される。
-- アナリストが投げる「お客さんのリスト見せて」SELECT user_id, email, phone, nameFROM usersWHERE last_login >= '2027-10-01';-- → email/phone/name はマスキングなしで Slack のチャンネルに展開-- 削除しても Slack のログには残り、退職者が見える1) Column-Level Security: カラムには専用ロール以外は マスク値を返す設定(BigQuery `Authorized Views`、Snowflake `Dynamic Data Masking`)。2) Slack 投稿の自動マスキング: クエリ結果を投稿する Bot 側で正規表現でメール/電話を `*@*.com` に置換。3) 監査ログで漏洩検知。詳細は EP.05・EP.10。
AP3: 職人化(属人化の増殖)
「この計算は田中さんしか書けない 300 行 」が増殖する。田中さんが退職すると組織の指標が再現できなくなる。Looker / の Personal Folder が放置され、誰の数字が正で誰のが間違いか分からない。
| 症状 | 影響 |
|---|---|
| ダッシュボードが 1000 個以上ある | メンテ不能、誰の責任か不明 |
| 「先週の数字と違う」報告 | 計算ロジックがバラバラ |
| 新人が前任者のクエリを解読不能 | オンボーディング地獄 |
| 田中さん退職で数字が再現不能 | 経営判断の信頼性崩壊 |
1) 指標の正本を 1 箇所に: の models / Looker の LookML / Tableau Datasource で「定義は中央集約、可視化は分散」。2) Personal Folder 廃止、Public Folder に置く前に Owner レビュー必須。3) クエリテンプレート化 で「ゼロから書かせない」。詳細は EP.09。
AP4: クエリの巨大化と 詰まり
民主化が進むと 同時実行クエリが急増し、ある日 BigQuery は `quota exceeded`、Snowflake は `warehouse queueing` で 業務時間中に分析が止まる。ノイジーネイバー問題を放置すると、夜間バッチも吹き飛ぶ。
1) ワークロード隔離: 部署別 / 用途別に 専用 Warehouse(Snowflake)/ Reservation(BigQuery) を切る。2) クエリ優先度設計: バッチは別レーン、対話的クエリには上限を。3) ピーク時の自動 autoscale。詳細は EP.06。
AP5: 監査不能(誰が何を見たか分からない)
ログ設定をしないまま民主化を進めると、情報漏洩発生時に「誰が何を見たか追えない」。退職者調査・内部不正調査・コンプライアンス監査で詰む。これは 取り返しのつかないアンチパターン ── 後から過去のログは復元できない。
-- 過去90日の高コストクエリ TOP 20SELECT user_email, query, total_bytes_billed / POW(10,12) AS tb_billed, creation_timeFROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECTWHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) AND state = 'DONE'ORDER BY total_bytes_billed DESCLIMIT 20;1) 民主化開始の Day 0 から監査ログ有効化: BigQuery は `INFORMATION_SCHEMA.JOBS_*` / Snowflake は `ACCESS_HISTORY` / `QUERY_HISTORY` を 長期保存 DWH に複製。2) 異常クエリのアラート: 高コスト・PII テーブル参照・営業時間外実行を Slack 通知。3) 月次 : 「監査済みアクション率」を追う。詳細は EP.10。
5 アンチパターン早見表
| # | 症状 | 本質的な対策 | 本シリーズの該当EP |
|---|---|---|---|
| AP1 | 全件スキャンでコスト爆発 | クエリ予算 + パーティション必須 | EP.06 |
| AP2 | 個人情報の Slack リーク | Column-Level Security + 自動マスキング | EP.05 |
| AP3 | BI 職人増殖、ダッシュ氾濫 | 指標中央集約 + クエリテンプレート | EP.09 |
| AP4 | DWH 詰まりで業務停止 | ワークロード隔離 + 自動スケール | EP.06 |
| AP5 | 監査不能で漏洩追跡不可 | Day 0 から監査ログ有効化 | EP.10 |
ふくふくの提案:先に「事故記録ノート」を作る
民主化プロジェクトを始める前に、「うちで起きそうな事故」を先に書き出す ことを推奨します。各部門のリスク責任者にヒアリングし、重要度 × 発生確率で 5-10 件にまとめると、ガードレール設計の優先順位が自然に決まります。民主化は『開放』だけでなく『予防』とセットで動く。
次の話
EP.03 では、民主化のインターフェース選び。Slack Bot / Streamlit / / NotebookLM など、組織サイズ・データリテラシー・データ機密性に応じてどれを選ぶかの判断軸を整理します。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。