えいのうにっき

むかしのじぶんのために書いています

BigQuery 上のテーブルを検索するときに頭の片隅に置いておきたい、課金絡みのこと

ぼくが所属している会社のプロダクトチームでは、毎週ふりかえり(KPT)を実施しているのだけど、そのときに「BigQuery に Rails のログを送り始めて、ログの検索をしやすくなって嬉しいは嬉しいのだけど、検索をかけるたびに課金されている実感があって、ヒヤヒヤしている」と、同僚から不安の声があがった。

まぁたしかに、このはなし↓も、まだ記憶に新しい。w

qiita.com

その不安を払拭(というか、正しく怖がりたいな、というきもち)すべく、BigQuery の query pricing を見返してたら、以前確認したときには見覚えのない記述があったりしたので、改めて一記事としてまとめてみる試み。

ここに書いていることは、2016-02-22 時点での内容です。あしからず。

BigQuery 上のテーブルを検索するときに頭の片隅に置いておきたい、課金絡みのこと

$5 / TB

ごどるぱーてらばいと。1 TB スキャンするごとに、$5。 100MB のデータが入っているテーブルに対してなんらかの SELECT 文を 1万回 発行したら、ようやく $5。

https://cloud.google.com/bigquery/pricing より)

毎月 1TB までは無料

$5 / TB、なんだけど、毎月さいしょの 1TB までは無料。これがあるので、「ちょっとどんなもんか試してみたい」「とりあえず、ログを送り始めてみた!」なんていうプロジェクトならほとんどにおいて、クエリで課金が発生する水準にまで到達しないんじゃないかなー。

First 1 TB per month is free

https://cloud.google.com/bigquery/pricing より)

エラーになったクエリに関しては課金されない

例えば構文エラーとか、かな。

You aren’t charged for queries that return an error, or for cached queries.

https://cloud.google.com/bigquery/pricing#query-pricing-details より)

キャッシュされた結果に対してアクセスするぶんには課金されない

BigQuery は全てのクエリの結果をキャッシュしてくれてる。キャッシュされた結果に対してアクセスするぶんには、課金されない。

You aren’t charged for queries that return an error, or for cached queries.

https://cloud.google.com/bigquery/querying-data#querycaching より)

スキャンサイズの最小単位は 10MB

スキャンサイズによって課金されるわけだけど、その最小単位は 10MB。つまり、500KB しか入っていないテーブルに対して SELECT 文を発行した場合でも、スキャンサイズは 500KB ではなく 10MB になる

Charges are rounded to the nearest MB, with a minimum 10 MB data processed per table referenced by the query, and with a minimum 10 MB data processed per query.

https://cloud.google.com/bigquery/pricing#query-pricing-details より)

クエリの実行を途中でキャンセルしても、普通に最後まで実行させた場合と同等のコストが掛かる場合がある

ある。

Cancelling a running query job may incur charges up to the full cost for the query were it allowed to run to completion.

https://cloud.google.com/bigquery/pricing#query-pricing-details より)

課金対象となるデータサイズは、選択した列内におけるデータスキャン総量

BigQuery は、カラム指向(列指向)のデータ構造。課金は、選択した列内における総データスキャン量に応じての課金になる。データサイズの計算方法は こちら

BigQuery uses a columnar data structure. You’re charged according to the total data processed in the columns you select, and the total data per column is calculated based on the types of data in the column.

https://cloud.google.com/bigquery/pricing#query-pricing-details より)

高い性能を要するクエリの実行には要注意

多大な計算機リソースを必要とするクエリを実行するには、専用のプラン的なやつに加入する必要がある。加入しないまま「多大な計算機リソースを必要とするクエリ」を実行しようとした場合、 billingTierLimitExceeded error が返るので、そこでわかる。

High-Compute queries are queries that require a large amount of resources to process per byte of source data. High-Compute queries account for less than 1 percent of all queries. In order to run these queries, you need to explicitly opt in. If your query is too expensive for BigQuery to complete at the standard $5 per TB pricing tier, BigQuery returns a billingTierLimitExceeded error and an estimate of how much the query would cost.

https://cloud.google.com/bigquery/pricing#high-compute より)

その他ちゅうい

「検索」に関しては多分以上なんだけど、単純に「データ置き場」としての料金も下記のように掛かるので、それも頭の片隅の片隅に置いておいていいかも。

  • 1GB のデータを1ヶ月置いておくのに、$0.02 必要。
    • 半月置いておくなら、$0.01 。保管期間の最小単位は (!)。
    • Storage pricing is prorated per MB, per second.
  • Streaming Insert(fluentd なんかで送っている場合もこれに該当)の場合、また別途お金が掛かる。
    • 200MB 毎に $0.01 。
    • どんなに小さな行データを送っても、最小単位が 1KB として計算。

2016-02-22 21:13 追記

GAE/Go の神こと id:digo さんよりブコメ頂いてましたー。

BigQuery 上のテーブルを検索するときに頭の片隅に置いておきたい、課金絡みのこと - えいのうにっき

custom quota使うのも手かな

2016/02/22 20:55

そう、ほんとの意味で「不安を払拭」もしくは「正しく怖がる」のであれば、Custom Quota の設定が本筋ですね。Custom Quota、Quota のカスタマイズ、つまり、1日の使用制限を自分で設定できるようになる。

Google Cloud Platform Japan 公式ブログ: BigQuery のカスタム クォータ機能や Query Explain をご紹介

あとは、これも同じく↑の記事にも書いてあるけど、自分の発行するクエリについてより理解を深めるために Query Explain(たとえば自分のクエリは書き込みか、読み込みか、計算負荷はどれくらいか、どこがパフォーマンスのボトルネックになりそうか、といった情報が表示される)を活用するのもいいかもしれない(クエリプランの説明  |  BigQuery のドキュメント  |  Google Cloud Platform)。

ただ、2016-02-22 現在でこのオプションが Web UI から消えている気がする。。まぁ、まだ beta 機能だったから、しばらくはこんな感じなのかもしれない(´・ω・`)。

まとめ

とはいえやっぱり安いよね、BigQuery!



follow us in feedly