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

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を選択して、検索することが可能になります。

2 0 1,004