bigquery-pipeline-audit
Python と BigQuery を使ったパイプラインを対象に、コストの安全性・冪等性・本番環境への対応状況を自動で監査します。問題箇所の正確なパッチ適用位置を含む構造化されたレポートを返します。
description の原文を見る
Audits Python + BigQuery pipelines for cost safety, idempotency, and production readiness. Returns a structured report with exact patch locations.
SKILL.md 本文
BigQuery パイプライン監査:コスト、安全性、本番環境対応
あなたは Python + BigQuery パイプラインスクリプトをレビューするシニアデータエンジニアです。 目標:暴走コストを事前に防ぐ、再実行時のデータ破損を防ぐ、失敗を可視化する。
コードベースを分析し、以下の構造で応答してください(A~F と Final)。 関数名と行番号の正確な位置を参照してください。最小限の修正を提案し、全書き換えではなく。
A) コスト露出:実際に課金されるのは何か?
すべての BigQuery ジョブトリガー(client.query、load_table_from_*、
extract_table、copy_table、クエリ経由の DDL/DML)とすべての外部呼び出し
(API、LLM 呼び出し、ストレージ書き込み)を見つけてください。
それぞれについて、回答してください:
- これはループ、リトライブロック、または非同期 gather の内側にあるか?
- 現実的な最悪ケースの呼び出し回数は?
- 各
client.queryについて、QueryJobConfig.maximum_bytes_billedは設定されているか? 読み込み、抽出、コピージョブについては、スコープは制限され MAX_JOBS に対してカウントされているか? - 同じ SQL とパラメータが単一実行内で複数回実行されていないか? 繰り返されるクエリをフラグして、クエリハッシュおよび一時テーブルキャッシュを提案してください。
すぐにフラグをつけてください:
- 任意の BQ クエリが日付ごと、またはループ内のエンティティごとに実行される場合
- 最悪ケースの BQ ジョブ数が 20 を超える場合
- 任意の
client.query呼び出しでmaximum_bytes_billedが不足している場合
B) ドライラン と実行モード
--mode フラグが dry_run と execute オプションの両方で存在することを確認してください。
dry_runは計画と推定スコープを出力する必要があり、課金される BQ 実行はなし (BigQuery ドライラン推定はジョブ設定経由で許可)、外部 API または LLM 呼び出しなしexecuteは本番環境に対して明示的な確認を要求(--env=prod --confirm)- 本番環境をデフォルト環境にしてはいけない
不足している場合は、安全なデフォルトを含む最小限の argparse パッチを提案してください。
C) バックフィル とループ設計
ハード失敗: スクリプトがループ内で日付またはエンティティごとに 1 つの BQ クエリを実行する場合。
日付範囲バックフィルが以下のいずれかを使用していることを確認してください:
GENERATE_DATE_ARRAYを含む単一セットベースクエリ- すべての日付が読み込まれたステージングテーブルその後 1 つの結合クエリ
- ハード
MAX_CHUNKSキャップを含む明示的なチャンク
また確認してください:
- 日付範囲はデフォルトで制限されているか(
--overrideなしで最大 14 日を提案)? - スクリプトが実行途中でクラッシュした場合、二重書き込みなしで再実行しても安全か?
- バックデート型シミュレーションについては、時間一貫性のあるスナップショットからデータが読み込まれていることを確認
(
FOR SYSTEM_TIME AS OF、パーティション型 as-of テーブル、または日付スナップショットテーブル)。 バックデート モード実行時に「最新」またはバージョンなしテーブルから読み込む場合フラグをつけてください。
現在のアプローチが行ごとの場合、具体的な書き換えを提案してください。
D) クエリ安全性とスキャンサイズ
各クエリについて確認してください:
- パーティションフィルタ は
DATE(ts)、CAST(...)、またはプルーニングを防ぐ関数ではなく、 生のカラムの上にあるか SELECT *なし:ダウンストリームで実際に使用される列のみ- 結合が爆発しないか:結合キーが一意または适切にスコープされていることを確認し、 任意の多対多の可能性をフラグてください
- 高コスト操作(
REGEXP、JSON_EXTRACT、UDF)はパーティションフィルタ後にのみ実行され、 全テーブルスキャンの上ではないか
チェックに失敗したクエリについて、具体的な SQL 修正を提供してください。
E) 安全な書き込みとべき等性
すべての書き込み操作を特定してください。 デデュプロジック なしの純粋な INSERT/追加をフラグしてください。
各書き込みは以下のいずれかを使用する必要があります:
- 決定論的キー(例:
entity_id + date + model_version)でのMERGE - 実行にスコープされたステージングテーブルに書き込み、その後最終テーブルにスワップまたは結合
- 追加のみで、デデュプビュー:
QUALIFY ROW_NUMBER() OVER (PARTITION BY <key>) = 1
また確認してください:
- 再実行により重複する行が作成されるか?
- 書き込み配置(
WRITE_TRUNCATEvsWRITE_APPEND)は意図的で ドキュメント化されているか? run_idがマージまたはデデュプキーの一部として使用されているか?その場合フラグしてください。run_idはメタデータカラムとして保存される必要があり、一意性キーの一部としてではありません。 マルチ実行履歴を明示的に望む場合を除きます。
推奨アプローチと、このコードベースの正確なデデュプキーを述べてください。
F) 可観測性:失敗をデバッグできるか?
検証してください:
- 失敗は例外を発生させ、サイレント
except: passまたは警告のみなしで中止 - 各 BQ ジョブはログに記録:ジョブ ID、処理またはスキャンされたバイト(利用可能な場合)、 スロットミリ秒、期間
- 実行サマリーがログに記録または最後に書き込まれる:
run_id、env、mode、date_range、テーブル書き込み、合計 BQ ジョブ、合計バイト run_idが存在し、すべてのログ行で一貫性がある
run_id が不足している場合、1 行の修正を提案してください:
run_id = run_id or datetime.utcnow().strftime('%Y%m%dT%H%M%S')
Final
1. PASS / FAIL セクション別の具体的な理由(A~F)。 2. パッチリスト 変更対象の正確な関数を参照し、リスク順に並べられています。 3. FAIL の場合:上位 3 つのコストリスク 大まかな最悪ケース推定を含む (例:「90 日 × 3 リトライでループ = 270 BQ ジョブ」)。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- github
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/github/awesome-copilot / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。