Membuat snapshot tabel
Dokumen ini menjelaskan cara membuat snapshot tabel menggunakan
konsol Google Cloud, pernyataan SQL
CREATE SNAPSHOT TABLE
, bq cp --snapshot
, atau API jobs.insert
. Dokumen ini ditujukan bagi pengguna yang sudah memahami snapshot tabel BigQuery.
Izin dan peran
Bagian ini menjelaskan Izin Identity and Access Management (IAM) yang dibutuhkan untuk membuat snapshot tabel, dan peran IAM bawaan yang memberikan izin akses tersebut.
Izin
Untuk membuat snapshot tabel, Anda memerlukan izin berikut:
Izin | Resource | Catatan |
---|---|---|
Semua izin berikut ini:bigquery.tables.get bigquery.tables.getData bigquery.tables.createSnapshot bigquery.datasets.get bigquery.jobs.create
|
Tabel yang ingin Anda ambil snapshot-nya. | Karena habisnya masa berlaku snapshot akan menghapus snapshot di lain waktu, untuk
membuat snapshot dengan waktu habis masa berlaku, Anda harus memiliki
izin bigquery.tables.deleteSnapshot . |
bigquery.tables.create bigquery.tables.updateData
|
Set data yang berisi snapshot tabel. |
Peran
Peran BigQuery yang telah ditetapkan dan menyediakan izin yang diperlukan adalah sebagai berikut:
Role | Resource | Catatan |
---|---|---|
Setidaknya salah satu dari yang berikut:bigquery.dataViewer bigquery.dataEditor bigquery.dataOwner Dan setidaknya salah satu dari yang berikut: bigquery.jobUser bigquery.studioUser bigquery.user bigquery.studioAdmin bigquery.admin
|
Tabel yang ingin Anda ambil snapshot-nya. | Hanya bigquery.dataOwner , bigquery.admin , dan
bigquery.studioAdmin yang dapat digunakan untuk membuat snapshot dengan
waktu habis masa berlaku. |
Setidaknya salah satu dari berikut ini:bigquery.dataEditor bigquery.dataOwner bigquery.studioAdmin bigquery.admin
|
Set data yang berisi snapshot tabel baru. |
Batasan
Untuk informasi tentang batasan snapshot tabel, lihat batasan snapshot tabel.
Selain itu, pembuatan snapshot tabel tunduk pada batasan berikut, yang berlaku untuk semua tugas penyalinan tabel:
- Saat Anda membuat snapshot tabel, namanya harus mematuhi aturan penamaan yang sama seperti saat Anda membuat tabel.
- Pembuatan snapshot tabel tunduk pada batas BigQuery pada tugas penyalinan.
- Set data snapshot tabel harus berada di region yang sama, dan dalam organisasi yang sama dengan set data yang berisi tabel yang Anda ambil snapshot-nya. Misalnya, Anda tidak dapat membuat snapshot tabel di set data yang berbasis di AS dari tabel yang berlokasi di set data yang berbasis di Uni Eropa. Sebagai gantinya, Anda harus membuat salinan tabel.
- Waktu yang diperlukan BigQuery untuk membuat snapshot tabel mungkin sangat bervariasi di berbagai operasi karena penyimpanan yang mendasarinya dikelola secara dinamis.
- Saat membuat snapshot tabel menggunakan BigQuery CLI, snapshot tersebut memiliki kunci enkripsi default set data tujuan. Saat membuat snapshot tabel menggunakan SQL, snapshot tersebut memiliki kunci enkripsi yang sama dengan tabel sumber.
Membuat snapshot tabel
Praktik terbaik adalah membuat snapshot tabel dalam set data yang berbeda dari tabel dasar. Praktik ini memungkinkan tabel dasar dipulihkan dari snapshot tabelnya meskipun set data tabel dasar tidak sengaja dihapus.
Saat membuat snapshot tabel, tentukan tabel yang ingin Anda snapshot dan nama unik untuk snapshot tabel tersebut. Selain itu, Anda dapat menentukan waktu snapshot dan waktu habis masa berlaku snapshot.
Membuat snapshot tabel dengan waktu habis masa berlaku
Anda dapat membuat snapshot tabel yang habis masa berlakunya setelah 24 jam menggunakan salah satu opsi berikut:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, luaskan project dan node set data dari tabel yang ingin Anda ambil snapshot-nya.
Klik nama tabel yang ingin Anda ambil snapshot-nya.
Di panel tabel yang muncul, klik Snapshot.
Di panel Create table snapshot yang muncul, masukkan informasi Project, Dataset, dan Table untuk snapshot tabel baru.
Di kolom Expiration time, masukkan tanggal dan waktu 24 jam dari sekarang.
Klik Save.
SQL
Gunakan
pernyataan DDL CREATE SNAPSHOT TABLE
:
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME OPTIONS ( expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');
Ganti kode berikut:
SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.TIMESTAMP_VALUE
: Nilai stempel waktu yang mewakili tanggal dan waktu 24 jam dari sekarang.
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Masukkan perintah berikut di Cloud Shell:
bq cp \ --snapshot \ --no_clobber \ --expiration=86400 \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
Ganti kode berikut:
TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.
Flag --no_clobber
wajib diisi.
API
Panggil
metode jobs.insert
dengan
parameter berikut:
Parameter | Nilai |
---|---|
projectId |
ID project dari project yang akan ditagih untuk operasi ini. |
Isi permintaan | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY", "destinationExpirationTime":"TIMESTAMP_VALUE" } } } |
Ganti kode berikut:
TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.TIMESTAMP_VALUE
: Nilai stempel waktu yang mewakili tanggal dan waktu 24 jam dari sekarang.
Seperti pada tabel, jika tidak ditentukan, masa berlaku snapshot tabel akan berakhir setelah waktu habis masa berlaku tabel default atau set data yang berisi snapshot tabel.
Membuat snapshot tabel menggunakan perjalanan waktu
Anda dapat membuat snapshot tabel dengan kondisi seperti pada satu jam yang lalu menggunakan salah satu opsi berikut:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, luaskan project dan node set data dari tabel yang ingin Anda ambil snapshot-nya.
Klik nama tabel yang ingin Anda ambil snapshot-nya.
Di panel tabel yang muncul, klik Snapshot.
Di panel Create table snapshot yang muncul, masukkan informasi Project, Dataset, dan Table untuk snapshot tabel baru.
Di kolom Snapshot time, masukkan tanggal dan waktu untuk 1 jam yang lalu.
Klik Save.
SQL
Gunakan
pernyataan DDL CREATE SNAPSHOT TABLE
dengan klausa FOR SYSTEM_TIME AS OF
:
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Ganti kode berikut:
SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Masukkan perintah berikut di Cloud Shell:
bq cp \ --no_clobber \ --snapshot \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME
Ganti kode berikut:
TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.
Flag --no_clobber
wajib diisi.
API
Panggil
metode jobs.insert
dengan parameter berikut:
Parameter | Nilai |
---|---|
projectId |
ID project dari project yang akan ditagih untuk operasi ini. |
Isi permintaan | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME@-360000" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY" } } } |
Ganti kode berikut:
TABLE_PROJECT_ID
: project ID untuk project yang berisi tabel tempat Anda membuat snapshot.TABLE_DATASET_NAME
: nama set data yang berisi tabel tempat Anda membuat snapshot.TABLE_NAME
: nama tabel tempat Anda membuat snapshot.SNAPSHOT_PROJECT_ID
: project ID dari project tempat untuk membuat snapshot.SNAPSHOT_DATASET_NAME
: nama set data tempat membuat snapshot.SNAPSHOT_NAME
: nama snapshot yang Anda buat.
Untuk informasi selengkapnya tentang menentukan versi tabel sebelumnya, lihat Mengakses data historis menggunakan perjalanan waktu.
Kontrol akses tabel
Untuk mengontrol akses ke tabel di BigQuery, lihat Pengantar kontrol akses tabel.
Saat Anda membuat snapshot tabel, akses tingkat tabel ke snapshot tabel ditetapkan sebagai berikut:
- Jika snapshot tabel menimpa tabel yang ada, akses tingkat tabel untuk tabel yang ada akan dipertahankan. Tag tidak disalin dari tabel dasar.
- Jika snapshot tabel adalah resource baru, akses tingkat tabel untuk snapshot tabel ditentukan oleh kebijakan akses set data tempat snapshot tabel dibuat. Selain itu, tag disalin dari tabel dasar ke snapshot tabel.
Langkah selanjutnya
- Memperbarui deskripsi, tanggal habis masa berlaku, atau kebijakan akses untuk snapshot tabel.
- Memulihkan snapshot tabel.
- Membuat snapshot bulanan tabel menggunakan akun layanan yang menjalankan kueri terjadwal.