BigQuery のワイルドカードテーブルを1つのViewを通して検索する方法

  • 23 December 2019
  • 0 replies
  • 487 views

Userlevel 1

BigQueryでは、以下のようなSuffix(接尾辞)付きのワイルドカードテーブルを、ワイルドカードを使って検索することが可能です。


テーブル例
log_table_20190101
log_table_20190102
log_table_20190103
・・・

SQL例
SELECT * FROM `<project-id>.<dataset-id>.log_table_*`

これらのテーブルに対して、Lookerにてcreate view from tableを行ってしまうと、log_table_20190101、log_table_20190102、log_table_20190103、・・・といった対となるViewがそれぞれ作成されてしまいます。このままでは、各テーブルにまたがった集計を行うのがとても不便です。そこで、これらのテーブルを一つのViewを通して一貫的に検索できるようにするためには、ViewおよびExploreにて行う必要があります。


まず以下の例のようにViewを記述する必要があります。_TABLE_SUFFIXをディメンションとして登録することで、WHERE句で適用可能な疑似列として利用できるようになります。


view: log_table {
sql_table_name: `<dataset-id>.log_table_*` ;;

dimension_group: partition {
type: time
sql: TIMESTAMP(PARSE_DATE('%Y%m%d', REGEXP_EXTRACT(_TABLE_SUFFIX,r'\d\d\d\d\d\d\d\d'))) ;;
}

以下、必要なDimension, Measureを定義してください。
・・・
}

次に、このViewを通してデータを探索するためには、以下の例のようにモデルでExploreを設定します。この時に、日付で検索対象のテーブルを絞り込まれるようにするために、connditionally_filterを使用しています。これにより、where句で_TABLE_SUFFIXを対して強制的にフィルターされるようになり、適切なパーティションフィルタリングが行われます。


explore: log_table {
conditionally_filter: {
filters: {
field: partition_date
value: "1 day"
}
unless: [partition_date]
}
}

以上の設定で、Exploreからlog_tableを選択して、検索することが可能になります。


0 replies

Be the first to reply!

Reply