その前に
これは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