Mengakses data historis

BigQuery memungkinkan Anda menggunakan perjalanan waktu untuk mengakses data yang tersimpan di BigQuery yang telah diubah atau dihapus.

Membuat kueri data pada waktu tertentu

Anda dapat membuat kueri untuk data historis tabel dari waktu tertentu dalam periode perjalanan waktu menggunakan klausa FOR SYSTEM_TIME AS OF. Klausa ini menggunakan ekspresi stempel waktu konstanta dan mereferensikan versi tabel yang aktual pada stempel waktu tersebut. Tabel tersebut harus disimpan di BigQuery; tabel itu tidak bisa berupa tabel eksternal. Tidak ada batasan ukuran tabel saat menggunakan SYSTEM_TIME AS OF.

Misalnya, kueri berikut menampilkan versi historis tabel dari satu jam yang lalu:

SELECT *
FROM `mydataset.mytable`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

Jika stempel waktu menentukan waktu dari sebelum periode waktu atau dari sebelum tabel dibuat, kueri akan gagal dan menampilkan error seperti berikut:

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

Setelah mengganti tabel yang ada menggunakan pernyataan CREATE OR REPLACE TABLE, Anda dapat menggunakan FOR SYSTEM_TIME AS OF untuk mengkueri tabel versi sebelumnya.

Jika tabel dihapus, kueri akan gagal dan menampilkan error seperti berikut:

Not found: Table myproject:mydataset.table was not found in location LOCATION

Dengan LOCATION adalah lokasi set data.

Namun, Anda dapat memulihkan tabel dengan menyalin dari satu titik waktu ke tabel baru, seperti yang dijelaskan dalam dokumen ini.

Memulihkan tabel dari titik waktu

Anda dapat memulihkan tabel dari data historis dengan menyalin data historis ke dalam tabel. Menyalin data tetap berfungsi meskipun tabel telah dihapus atau telah habis masa berlakunya, asalkan Anda memulihkan tabel dalam durasi periode perjalanan waktu.

Untuk menyalin data historis dari tabel, tambahkan dekorator ke nama tabel menggunakan sintaksis berikut:

  • tableid@TIME dengan TIME adalah jumlah milidetik sejak epoch Unix.
  • tableid@-TIME_OFFSET dengan TIME_OFFSET adalah offset relatif dari waktu saat ini, dalam milidetik.
  • tableid@0: Menentukan data historis terlama yang tersedia.

Misalnya, perintah alat command line bq berikut menyalin tabel bernama table1 dari satu jam yang lalu ke tabel bernama table1_restored. Waktu, -3600000, ditentukan dalam milidetik menggunakan offset relatif.

bq cp mydataset.table1@-3600000 mydataset.table1_restored

Perintah alat command line bq berikut menyalin tabel bernama table1 ke dalam tabel bernama table1_restored. Waktu, 1624046611000, ditentukan sebagai milidetik sejak epoch Unix.

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

Untuk informasi selengkapnya, lihat Memulihkan tabel yang dihapus.

Langkah berikutnya