[GCP] 複数テーブルを横断して検索する

ヨメレバCSS
オリジナルCSS

 GCPでは毎日のログなどを保存するときテーブル名に日付を入れてパーティショニングしたりするので、複数のテーブルをSELECTの対象にしたくなるときがあります。

スポンサーリンク
GoogleAdSence レクタングル(大)

「*」(ワイルドカード)でテーブル名を指定する

 SELECT文に「*」を入れることで、その他の部分にマッチしたテーブル名を持つ複数のテーブルを横断して検索することができます。

 例えば次のテーブル名でテーブルを作成します。

  • sample_20181218
  • sample_20181219
  • sample_20181220

このテーブルに、次のデータを入れておきます。

テーブル id timestamp
sample_20181218 1 2018-12-18
sample_20181219 1 2018-12-19
sample_20181220 1 2018-12-20

 次のSELECT文を実行するとすべて対象に出来ます。

SELECT * FROM `xxxx.sample.sample_201812*`

結果。

 3つのテーブルに登録されているデータを抽出することができました。

対象となるテーブルをさらに_TABLE_SUFFIXで絞り込む

 横断検索できるのは便利ですが、対象テーブルが多くなりすぎるとデータ量が増えたり時間が掛かったりしてそれはそれで困ります。

 そこで_TABLE_SUFFIX疑似列を用いると「*」でフィルタされたところからさらに絞り込むことが出来ます。

 _TABLE_SUFFIX疑似列には、「*」でマッチした文字列が入ってきますので、それをWHERE句で判定します。

SELECT * FROM `xxxx.sample.sample_201812*` 
WHERE _TABLE_SUFFIX = '18' OR _TABLE_SUFFIX = '20'

とすれば、「sample_20181218」と「sample_20181220」が対象になります。

 さらにここで注目してほしいのは、右上の処理バイト数です。

 全体を指定したSELECT文は48 B、「18」と「20」を指定したSELECT文は32 Bとなっています。

 この数値はBigQueryで検索対象となるデータサイズで料金に直結するところです。

 つまり_TABLESUFFIXであらかじめフィルタリングできれば、料金も節約することができます。

参考:ワイルドカード テーブル

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)