通常、BigQuery はクエリの実行時に行のフルスキャンを行います。
レガシー SQL でテーブル デコレータを使用すると、より効率的にデータの一部に対してクエリを実行できます。テーブル デコレータは、テーブルのコピー、テーブルのエクスポート、tabledata.list
によるデータの一覧取得など、テーブルを読み取るときに使用できます。
テーブル デコレータでは <time>
の相対値と絶対値を使用できます。相対値は負の数値、絶対値は正の数値で指定します。たとえば、-3600000
は現在の時刻より 1 時間前をミリ秒で表しており、3600000
は 1970 年 1 月 1 日から 1 時間後をミリ秒で表しています。
スナップショット デコレータ
構文
@<time>
<time>
の時点でのテーブルのスナップショットを参照します。時刻はエポック時間(ミリ秒)で表します。<time>
は過去 7 日以内で、テーブルの作成時刻以降でなければなりません。また、テーブルの削除時刻または有効期限より前である必要があります。@0
は、テーブルの最も古いスナップショットを参照する特殊なケースです。
スナップショット デコレータを使用すると、テーブルの削除から 7 日以内であればテーブルの削除を取り消すことができます。
例
1 時間前のテーブルのスナップショットを取得するには:
相対値の例
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]
絶対値の例
1 時間前の
<time>
を取得します。#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
次のクエリ内の
<time>
を置き換えます。#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
スナップショット デコレータと bq
コマンドライン ツールを使用してテーブルの削除を取り消すには:
テーブルの削除を取り消す例
まず、テーブルが削除される前のタイムスタンプを確認します。時刻はエポック時間(ミリ秒)で表します。次に、そのタイムスタンプの時点のテーブルを新しいテーブルにコピーします。新しいテーブルの名前は、削除したテーブルとは異なる名前にする必要があります。
# Create a table "dataset1.table1"
$ bq query --destination_table=dataset1.table1 "select 1"
# Get current timestamp
$ date +%s%3N
1573060348222
# Delete table1
$ bq rm dataset1.table1
# Undelete table
$ bq cp dataset1.table1@1573060348222 dataset1.table1_restore
範囲デコレータ
構文
@<time1>-<time2>
<time1>
から<time2>
までの間に追加されたテーブルデータを参照します。時刻はエポック時間(ミリ秒)で表します。<time1>
と<time2>
は過去 7 日以内である必要があります。<time2>
は省略できます。省略すると、デフォルトで現在の時刻が使用されます。
例
相対値の例
1 時間前から 30 分前の間に追加されたテーブルデータを取得するには:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]
過去 10 分間からデータを取得するには:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]
絶対値の例
1 時間前から 30 分前の間に追加されたテーブルデータを取得するには:
1 時間前の
<time1>
を取得します。#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
30 分前の
<time2>
を取得します。#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
次のクエリ内の
<time1>
と<time2>
を置き換えます。#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]