PythonでBigQueryの料金を監視する

この記事は  GMOアドマーケティングAdvent Calendar 2020   2日目の記事です。

皆さん

こんにちは、GMOアドマーケティングのS.Rです。

GoogleのBigQuery(Google Cloud Platform)という大規模なデータ分析ツールを使ったことがありますか?
BigQueryでは1PB(ペタバイト)あるいは10億行といった膨大なデータに対して、SQLで集計・分析処理を極めて高速に実行できます。
ただBigQueryのQueryを実行するには、気を付けなければ高い料金が課せられます。
今回は、Pythonで、GCPのSDKでBigQueryの実行する状況を監視するプログラムを作る方法を、皆さんへ紹介させていただきます。

プログラムの構成

プログラムの構成は下記です。

Service account を作成&権限を設定

  1. GCPの管理画面Service accountTabCREATE SERVICE ACCOUNTを押して新しservice accountを作成します。

2.今回の例では”bigquery_poilce”service account を作成します。

3.作成されたservice account bigquery resource viewの権限を付与します。

4.作成したservice accountKey fileをダウンロードします。ファイル名”bigquery_police.json”で保存します。

Pythonのコードを書く

1.  Libraryをimportします。

2. Service accountのkey fileをロードします。

3. 30分前から今の時点までのBigQueryのjobをリストします。

4.実際の課金金額を換算します。

実行履歴には実際の課金金額は記載されていないので手動で換算する必要があります。計算式は下記です。

  • job.total_bytes_billed:利用されたバイト数です。
  • BYTE2GB: バイトからGBへ変換する率です。
  • RATE: 1GBの課金金額です。

5.jobの実行履歴をPandasのDataFrameに保存します。

6. DataFrameをBigQueryへアップロードします。

BigQueryのjobを実行する履歴を格納する先を指定してアップロードします。今回の例で格納する先は下記です。

project_id test_project
dataset bigquery_job_history
table name  bigquery_cost_%Y%m%d”

Pythonのコードは下記です。

Queryを実行する履歴を確認する

下記のコマンドでQueryを実行する履歴を確認しましょう。

実行した結果は下記です。

まとめ

今回はPythonで、GCPSDKBigQueryを実行する状況を監視するプログラムを作る方法を紹介しました。いかがだったでしょうか。

弊社では100G以上の重いQueryがあった場合はQueryの実行者、課金金額とQuery内容Slackで責任者へ共有しています。BigQueryの課金管理は楽になりました。

明日は、引き続き私から「PythonでBigQueryの実行情報をSlackへ共有する方法」について紹介します。

引き続き、 GMOアドマーケティングAdvent Calendar 2020 をお楽しみください!

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://www.gmo-ap.jp/engineer/

■noteページ ~ブログや採用、イベント情報を公開中!~
https://note.gmo-ap.jp/