Dekorator tabel di Legacy SQL

Biasanya, BigQuery melakukan pemindaian kolom penuh saat menjalankan kueri. Anda dapat menggunakan dekorator tabel di legacy SQL untuk melakukan kueri sebagian data yang lebih hemat biaya. Dekorator tabel dapat digunakan setiap kali tabel dibaca, seperti saat menyalin tabel, mengekspor tabel, atau mencantumkan data menggunakan tabledata.list.

Dekorator tabel mendukung nilai <time> yang relatif dan absolut. Nilai relatif ditunjukkan dengan bilangan negatif, dan nilai absolut ditunjukkan dengan bilangan positif. Misalnya, -3600000 menunjukkan satu jam yang lalu dalam milidetik, relatif terhadap waktu saat ini; 3600000 menunjukkan satu jam dalam milidetik setelah 1/1/1970.

Dekorator waktu

Dekorator waktu (sebelumnya dikenal sebagai dekorator snapshot) mereferensikan data historis tabel pada suatu waktu.

Sintaksis

@<time>
  • Mereferensikan data historis tabel pada <time>, dalam milidetik sejak epoch.
  • <time> harus berada dalam waktu tujuh hari terakhir dan lebih lama dari atau sama dengan waktu pembuatan tabel, tetapi kurang dari waktu penghapusan atau habis masa berlaku tabel.
  • @0 adalah kasus khusus yang mereferensikan data terlama yang tersedia untuk tabel.

Dekorator waktu juga digunakan di luar legacy SQL. Anda dapat menggunakannya dalam bq cp perintah untuk memulihkan tabel yang telah dihapus](/bigquery/docs/managing-tables#undeletetable) dalam waktu tujuh hari setelah penghapusan tabel ini.

Contoh

Untuk mendapatkan data historis untuk tabel satu jam yang lalu:

Contoh nilai relatif

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]

Contoh nilai absolut

  1. Dapatkan <time> selama satu jam yang lalu:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Kemudian, ganti <time> di kueri berikut:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
    

Dekorator rentang

Sintaksis

@<time1>-<time2>
  • Mereferensikan data tabel yang ditambahkan antara <time1> dan <time2>, dalam milidetik sejak epoch.
  • <time1> dan <time2> harus berada dalam tujuh hari terakhir.
  • <time2> bersifat opsional dan defaultnya adalah 'sekarang'.

Contoh

Contoh nilai relatif

Untuk mendapatkan data tabel yang ditambahkan antara satu jam dan setengah jam yang lalu:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]

Untuk mendapatkan data selama 10 menit terakhir:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]

Contoh nilai absolut

Untuk mendapatkan data tabel yang ditambahkan antara satu jam dan setengah jam yang lalu:

  1. Dapatkan <time1> selama satu jam yang lalu:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Dapatkan <time2> selama setengah jam yang lalu:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. Ganti <time1> dan <time2> dalam kueri berikut:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]