BigQueryのオンデマンドクエリ料金を見積もるPythonパッケージをつくりました。
経緯
BigQueryをオンデマンドクエリ料金で運用していると、作成したクエリを実行したら一体どれくらいのコストがかかるのか?ということが気になります。 bqコマンドにはdryrunオプションがありますので、これを使ってスキャン量の見積ができますが、もっと気軽にしゅっと見積ができて、かつ使うひとに寄り添った出力がほしいなと思いました。シェルスクリプトで頑張るにはちょっと…という分量になりそうな予感がしましたので、今回はPythonパッケージをつくることにしました。*1
つくったもの
これはなにか
BigQueryを対象とした、SQLシンタックスチェック結果
とクエリコスト試算結果
を出力します。
通常のPython環境のほか、Google Colaboratory でも動作することを確認済みです。
導入方法
$ pip install sfb
実行方法
$ sfb { "Succeeded": [ { "SQL File": "/home/admin/project/sfb_test/sql/covid19_open_data.covid19_open_data.sql", "Total Bytes Processed": "1.9 GiB", "Estimated Cost($)": { "per Run": 0.009414, "per Month": 0.28242 }, "Frequency": "Daily" }, { (中略) } ], "Failed": [ { "SQL File": "/home/admin/project/sfb_test/sql/test_failure_badrequest_01.sql", "Errors": [ { "message": "Unrecognized name: names; Did you mean name? at [9:5]", "domain": "global", "reason": "invalidQuery", "location": "q", "locationType": "parameter" } ] }, { (中略) } ] }
入力
以下のいずれかをとります。
- SQLファイル
- クエリ文字列
出力
- JSONで以下を標準出力
- シンタックスチェック結果(エラーの場合は原因を出力)
- クエリコスト試算結果($)
- 1実行あたりのコスト
- 月額コスト(configで実行頻度を設定している場合)
- 成功・失敗で分類
詳しい内容や設定方法は、GitHubのリポジトリをご参照ください
想定ユースケース
- 開発段階での試行錯誤のお供として
- 気軽にチェックできることはコスト意識の向上につながるはず
- CIへの組み込み
- コスト面もチェックできるSQLテストツールとしてつかえるはず
今後の予定
Development Status
4 - Beta
で公開しています。不具合や改善点など、フィードバックをくださる心優しい方を募集中です!