LoginSignup
13
5

More than 5 years have passed since last update.

MAGELLAN BLOCKSでBigQueryのクエリをチェーンする

Last updated at Posted at 2016-12-14

中間テーブルを作成し、分析するクエリを中間テーブルに対して実行するという操作は、パフォーマンス向上や料金の節約のためなどにBigQueryでそれなりによくやる操作です。
一度やるだけならBigQuery Web UIで適当にやればいいんですが、何度も実行する場合や、毎日一回自動でやるという処理をしたい場合、どこからクエリを投げるのか、ちょっと悩むところです。
Compute Engineのcronで設定すると、Compute Engine管理するのが面倒だし、App EngineやGoogle Scriptでやる場合は、そこそこロジック組んであげる必要があります。
ごりごりロジック書ける人は好きな方法でやればいいんですが、今回は適当にブロック繋いでいけば適当にやってくれる MAGELLAN BLOCKS でやるやり方を紹介します。

実行するクエリ

bigquery-public-data:samples.natality のテーブルに対してクエリを複数回実行します。
似たようなカラムに対するクエリを複数回実行する前に、必要なデータを抽出して中間テーブルを作ることで、読み込むデータサイズを小さくして、パフォーマンス向上とクエリ料金を節約する感じのものです。

# 中間テーブル用のクエリ
SELECT
  year, state, mother_age, mother_race, drinks_per_week
FROM
  [bigquery-public-data:samples.natality]
WHERE
  state = 'WI' OR 
  state = 'CA' OR 
  state = 'CO'
# COのデータを取得する
SELECT year, state, AVG(mother_age) AS avg_mother_age
FROM cpb200demo1:work.state_data
WHERE state = 'CO'
GROUP BY state, year
ORDER BY year ASC
# CAのデータを取得する
SELECT year, state, mother_race, count(*) AS num_mothers
FROM cpb200demo1:work.state_data
WHERE state = 'CA'
GROUP BY state, year, mother_race
ORDER BY year ASC
# WIのデータを取得する
SELECT year, state, avg(drinks_per_week) AS avg_drinks_wk
FROM cpb200demo1:work.state_data
WHERE state = 'WI'
GROUP BY state, year
ORDER BY year ASC

ブロックの設置

ボードの作成までの手順は 公式のドキュメント に書いてあるので、BigQueryのブロックの設置から説明します。

まず、中間テーブルを作成するブロックを設置します。
クエリを実行するので、BigQueryの クエリーの実行 を使います。

mb1.png

次に分析用クエリのブロックを繋げていきます。

mb2.png

この時便利なのが、拡張設定で、 実行に必要なテーブル のところに、中間テーブルを指定しておくと、そのテーブルがあるのを確認して、クエリを実行してくれます。

mb3.png

後は、投げたいクエリの数だけブロックを置いておけばOKです。

おまけ

MAGELLAN BLOCKSの クエリーの実行 ブロックはクエリ実行のプライオリティのデフォルトがバッチモードになっています。
おそらくDaily Batchとかで人がいない時に実行するのがデフォルトの思想にあるからだと思いますが、ブロック置いてテストしてる時は、インタラクティブモードの方がとっとと実行されて便利なので、拡張オプションからインタラクティブに変えてテストして、できあがったら最後にバッチモードにすれば良いと思います。

mb4.png

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5