GoogleCloudPlatform
GoogleBigQuery
bigquery

そろそろJOINの使い方を考えようか?

More than 1 year has passed since last update.


その前に

これはBigQueryのJOINを否定するものじゃありません。

BigQueryのJOINはチューニングとか考えないでいいし、本当に最強だと思います。これのおかげで数千万x数億とかでもサクサク動いてくれるし。

ただ、今まではこれでよかったのですが。。。。。。


みんなTierって知ってるか?

2016年以降に作ったProjectで利用されている方はご存知かと思います。

クエリを投げた後に『お前のクエリはTier2以上でよろしく』って言われたことあると思います。

残念ながら2016年以前に作られたProjectではこれが出ません。

(※ごめん、最近は出てるのかな?)

だから、自分もあんまり意識してなかったのですが最近作ったProjectで出始めたので調査してみました。Tierはどういうことなのか?以下の表に示します。

Tier
費用

Tier1
$5/TB

Tier2
$10/TB

Tier3
$15/TB

こちらに詳しく記載があります。

と、いうことでTierがあがっていくうちに今までのクエリの料金が2倍、3倍とあがっていきます。Tierがあがる閾値は正直わかりません。ただ、以下のような記載があります。

『複雑なクエリでは、処理されるバイト数と比べて膨大なコンピューティング リソースが消費されることがあります。通常、そうしたクエリには非常に多くの JOIN 句や CROSS JOIN 句、複雑なユーザー定義関数が含まれます。』

こういった経緯から、今までJOINしまくってViewを使ったりしていましたが、そろそろクエリがコケはじめてくると思います。考える時期にきたのかもしれません。

※注:2016/10/01より課金があがるように書いていますが、どうやら2017/01/01からという情報もあったり。今のところ実際に課金はあがっていないように見えます。たぶん。


じゃ、どうする?

一番最初に書きましたが、JOINが悪いとは思いません。

段階的に使っていくのが良いと思います。

人間っていうのは欲が出ます。案外簡単に結果が出来ると『あれも欲しい、これも欲しい』となるものです。JOINやViewを利用することで、その要望も簡単に答えられます。

しかし、いつまでも2倍、3倍の料金を支払うのもどうかと。ですから、プロトタイプや初期段階ではJOINやViewで運用し、定着し始めたらJOINやViewの結果をテーブルに落としこんで非正規化してそっちを使う。

こういう使い方が良いと思います。もうとっくに気づいてる人も多いと思いますけどね(笑)

あとは割り切っちゃう方法もありです。こちらを申し込むとTierに関係なくいつでも元気にTier3で回すという富豪的使い方も出来ます。ご利用は計画的に。


ということで。

今まで自分が『JOIN最高!Viewで使いまくれ!』って言ってましたが、そろそろ考えるときがきました。(そもそも、JOINを使うとぶちあてるカラムの課金が二重になっているわけで。)

Tierで課金があがらないうちに、みなさん見直していきましょうね。

あぁ、わしも考えねば。。。。。。。orz