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
denganTIME
adalah jumlah milidetik sejak epoch Unix.tableid@-TIME_OFFSET
denganTIME_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
- Pelajari snapshot tabel lebih lanjut.