Help us understand the problem. What is going on with this article?

BigQueryで日付ごとに作られたテーブルを検索する Legacy SQL を Standard SQL に変換する

More than 1 year has passed since last update.

BigQueryで日付ごとに解析したいデータを入れるときの第一オプションは日付によるテーブルパーティショニングだと思います。しかし、テーブルパーティショニングの日付として扱えるフィールドがデータの中にない場合や、テーブルパーティショニングが公開される以前は table_20181206 のように日付の入ったテーブルを作成することがよく行われていました。

BigQueryではこのようなテーブルを作成すると、従来のコンソール画面では1UI上で日付のプルダウンが作成され、スキーマとプレフィックスが一致していて日付だけが違うテーブルはあたかも同一テーブルであるかのように扱えます。

スクリーンショット 2018-12-06 00.35.17.png

しかし、これはあくまでUI上の話で実際には別テーブルなので複数テーブルを扱うクエリを書く必要があります。以前関わっていた仕事では長らく Legacy SQL を使って日付ごとに分割されたテーブルにクエリを書いていましたが、現在では Standard SQL が使えるのでこれを書き換えてみたいと思います。

Legacy SQL と Standard SQL

Legacy SQL

SELECT
  spam
FROM
  TABLE_DATE_RANGE([project-999:dataset.table_], TIMESTAMP('2018-12-01'), TIMESTAMP('2018-12-25'))
WHERE
  egg >= 1

Legacy SQL では TABLE_DATE_RANGE を使って project-999:dataset.table_ とプレフィックスのついたテーブルを検索しています。[] で囲っているのはこれがなければ : がシンタックスエラーになるためです。

Standard SQL

SELECT
  spam
FROM
  `project-999.dataset.table_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20181201' AND '20181225'
AND
  egg >= 1

Standard SQL では TABLE_DATE_RANGE が使えないので _TABLE_SUFFIX を使っています。プロジェクト名・データセット名・テーブル名は . で区切り [] ではなくバッククォートで囲います。

手作業で変換すべきなのか?

未だ Legacy SQL で書かれているクエリは数多く存在していると思うのでそれがすぐに使えなくなる未来は想像したくありませんが、 "Legacy" と名前がついているので今後は Standard SQL を使ったほうが良いのかと思います。どこかのイベントで Google の中の人に「Legacy SQL を Standard SQL に変換するツールを作らないのか」と質問が投げられていましたが、「Legacy SQL は"スタンダードなSQL" には無い機能があり、単純に変換するのは簡単ではなくできたとしても100%ではない」というニュアンスのことを言っていた気がします。なのでそのようなツールがあったとしてもある程度自分で変換する作業が必要かもしれません。


  1. 新しいコンソール画面に慣れていないので今どうなっているかわかりません。 

itkr
おひさま
http://itkr.github.io
colorful-board
「すべての人々に、人生が変わる出会いを」をビジョンとして、これまで出会えなかった情報と瞬時に出会うことで人々の生活をより豊かにする、新しい情報発見のためのプラットフォームを目指しています。
https://sensy.ai/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした