Membuat snapshot tabel dengan kueri terjadwal
Dokumen ini menjelaskan cara membuat snapshot bulanan dari satu tabel menggunakan akun layanan yang menjalankan kueri DDL terjadwal. Dokumen ini akan memandu Anda melalui contoh berikut:
- Di project
PROJECT
, buat akun layanan bernamasnapshot-bot
. - Beri akun layanan
snapshot-bot
izin yang diperlukan untuk mengambil snapshot tabel dari tabelTABLE
, yang terletak di set dataDATASET
, dan simpan snapshot tabelnya dalam set dataBACKUP
. - Tulis kueri yang membuat snapshot bulanan
dari tabel
TABLE
tabel dan menempatkannya di set dataBACKUP
. Karena Anda tidak dapat menimpa snapshot tabel yang ada, snapshot tabel tersebut harus memiliki nama yang unik. Untuk mencapai hal ini, kueri menambahkan tanggal saat ini ke nama snapshot tabel; misalnya,TABLE_20220521
. Snapshot tabel akan habis masa berlakunya setelah 40 hari. - Jadwalkan akun layanan
snapshot-bot
untuk menjalankan kueri pada hari pertama setiap bulan.
Dokumen ini ditujukan untuk pengguna yang sudah memahami BigQuery dan snapshot Tabel BigQuery.
Izin dan peran
Bagian ini menjelaskan Izin Identity and Access Management (IAM) Anda perlu membuat akun layanan dan menjadwalkan kueri, dan peran IAM yang telah ditetapkan yang memberikan izin akses tersebut.
Izin
Untuk menggunakan akun layanan, Anda memerlukan izin berikut:
Izin | Resource | Jenis aset |
---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Project |
Untuk menjadwalkan kueri, Anda memerlukan izin berikut:
Izin | Resource | Jenis aset |
---|---|---|
bigquery.jobs.create
|
PROJECT |
Project |
Peran
Peran yang telah ditetapkan sebelumnya dan memberikan izin yang diperlukan agar dapat bekerja dengan akun layanan adalah sebagai berikut:
Peran | Resource | Jenis aset |
---|---|---|
Apa pun dari yang berikut ini:roles/iam.serviceAccountAdmin roles/editor roles/owner
|
PROJECT |
Project |
Peran BigQuery yang telah ditentukan dan memberikan izin yang diperlukan untuk menjadwalkan kueri adalah sebagai berikut:
Peran | Resource | Jenis aset |
---|---|---|
Apa pun dari yang berikut ini:roles/bigquery.user roles/bigquery.jobuser roles/bigquery.admin
|
PROJECT |
Project |
Buat akun layanan snapshot-bot
:
Ikuti langkah-langkah berikut untuk membuat snapshot-bot
akun layanan
dan memberinya
izin yang diperlukan untuk menjalankan
kueri di project PROJECT
:
Konsol
Di Konsol Google Cloud, buka halaman Akun layanan:
Pilih project
PROJECT
.Buat akun layanan
snapshot-bot
:Klik Create service account.
Dalam kolom Nama akun layanan, masukkan snapshot-bot.
Klik Create and Continue.
Berikan izin yang diperlukan akun layanan untuk menjalankan tugas BigQuery:
Di bagian Berikan akun layanan ini akses ke project pilih peran BigQuery User.
Klik Done.
BigQuery membuat akun layanan dengan alamat email
snapshot-bot@PROJECT.iam.gserviceaccount.com
.
Untuk memverifikasi bahwa BigQuery membuat akun layanan dengan izin yang Anda tentukan, ikuti langkah-langkah berikut:
Konsol
Pastikan BigQuery telah membuat akun layanan:
Di Konsol Google Cloud, buka halaman Akun layanan:
Pilih project
PROJECT
.Klik snapshot-bot@PROJECT.iam.gserviceaccount.com.
Verifikasi bahwa pesan Status akun layanan menunjukkan bahwa akun layanan Anda aktif.
Pastikan BigQuery telah memberi akun layanan Anda izin yang diperlukan untuk menjalankan kueri:
Di Konsol Google Cloud, buka halaman Mengelola resource:
Klik
PROJECT
.Klik Tampilkan Panel Info.
Di tab Izin, luaskan node BigQuery User.
Pastikan akun layanan snapshot-bot Anda tercantum.
Memberikan izin ke akun layanan
Bagian ini menjelaskan cara memberikan izin yang diperlukan akun layanan
snapshot-bot
untuk membuat snapshot tabel dari tabel DATASET.TABLE
dalam set data BACKUP
.
Izin untuk mengambil snapshot tabel dasar
Untuk memberi akun layanan snapshot-bot
izin yang diperlukan untuk
mengambil snapshot tabel DATASET.TABLE
, ikuti langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, luaskan node project
PROJECT
.Luaskan node set data DATASET.
Pilih tabel TABLE.
Klik Bagikan. Panel Bagikan akan terbuka.
Klik Tambahkan Akun Utama. Panel Berikan akses akan terbuka.
Di Akun utama baru, masukkan alamat email akun layanan: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dari dropdown Pilih peran, pilih peran BigQuery Data Editor.
Klik Simpan.
Di panel Berbagi, luaskan node Editor Data BigQuery dan verifikasi bahwa akun layanan snapshot-bot@PROJECT.iam.gserviceaccount.com telah tercantum.
Klik Close.
bq
Di Konsol Google Cloud, aktifkan Cloud Shell:
Masukkan perintah:
bq add-iam-policy-binding
berikut:bq add-iam-policy-binding \ --member=serviceAccount:snapshot-bot@PROJECT.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor DATASET.TABLE
BigQuery mengonfirmasi bahwa binding kebijakan baru telah ditambahkan.
Izin untuk membuat tabel di set data tujuan
Berikan izin yang diperlukan akun layanan snapshot-bot
untuk membuat
snapshot tabel di set data BACKUP
sebagai berikut:
Konsol
Di Konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, luaskan node project
PROJECT
.Klik menu untuk node set data BACKUP, lalu pilih Buka.
Klik Bagikan Set Data. Panel izin Set Data akan terbuka.
Di kolom Tambahkan anggota, masukkan alamat email akun layanan: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dari dropdown Pilih peran, pilih peran BigQuery Data Owner.
Klik Tambahkan.
Di panel Izin set data, pastikan akun layanan snapshot-bot@PROJECT.iam.gserviceaccount.com tercantum di node BigQuery Data Owner.
Klik Done.
Akun layanan snapshot-bot
Anda kini memiliki peran IAM
berikut untuk resource sebagai berikut:
Peran | Resource | Jenis aset | Tujuan |
---|---|---|---|
Editor Data BigQuery | PROJECT:DATASET.TABLE |
Tabel | Mengambil snapshot tabel TABLE . |
BigQuery Data Owner | PROJECT:BACKUP |
Set data | Membuat dan menghapus snapshot tabel di set data BACKUP . |
BigQuery User | PROJECT |
Project | Jalankan kueri terjadwal yang membuat snapshot tabel. |
Peran ini memberikan izin yang diperlukan akun layanan snapshot-bot
untuk menjalankan kueri yang membuat snapshot tabel
DATASET.TABLE
dan menempatkan snapshot tabel di set data BACKUP
.
Menulis kueri multi-pernyataan
Bagian ini menjelaskan cara menulis
kueri multi-pernyataan
yang membuat snapshot tabel
dari tabel DATASET.TABLE
dengan menggunakan
pernyataan DDL CREATE SNAPSHOT TABLE
.
Snapshot disimpan dalam set data BACKUP
dan habis masa berlakunya setelah satu hari.
-- Declare variables DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; -- Set variables SET expiration = DATE_ADD(current_timestamp(), INTERVAL 1 DAY); SET snapshot_name = CONCAT( "BACKUP.TABLE_", FORMAT_DATETIME('%Y%m%d', current_date())); -- Construct the query to create the snapshot SET query = CONCAT( "CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE mydataset.mytable OPTIONS(expiration_timestamp = TIMESTAMP '", expiration, "');"); -- Run the query EXECUTE IMMEDIATE query;
Menjadwalkan kueri bulanan
Jadwalkan kueri Anda agar berjalan pada pukul 05.00 pada hari pertama setiap bulan sebagai berikut:
bq
Di Konsol Google Cloud, aktifkan Cloud Shell:
Masukkan perintah
bq query
berikut:bq query --use_legacy_sql=false --display_name="Monthly snapshots of the TABLE table" \ --location="us" --schedule="1 of month 05:00" \ --project_id=PROJECT \ 'DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY); SET snapshot_name = CONCAT("BACKUP.TABLE_", FORMAT_DATETIME("%Y%m%d", @run_date)); SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"", expiration, "\");"); EXECUTE IMMEDIATE query;'
BigQuery menjadwalkan kueri.
Kueri multi-pernyataan dalam perintah alat command line bq berbeda dengan kueri yang Anda jalankan di Konsol Google Cloud sebagai berikut:
- Kueri alat command line bq menggunakan
@run_date
, bukancurrent_date()
. Dalam kueri terjadwal, parameter@run_date
berisi tanggal saat ini. Namun, dalam kueri interaktif, parameter@run_date
tidak didukung. Anda dapat menggunakancurrent_date()
bukan@run_date
untuk menguji kueri interaktif sebelum menjadwalkannya. - Kueri alat command line bq menggunakan
@run_time
, bukancurrent_timestamp()
, untuk alasan serupa—parameter@run_time
tidak didukung dalam kueri interaktif, tetapicurrent_timestamp()
dapat digunakan sebagai pengganti@run_time
untuk menguji kueri interaktif. - Kueri alat command line bq menggunakan garis miring dan tanda kutip ganda
\"
, bukan tanda kutip tunggal'
karena tanda kutip tunggal digunakan untuk mencakup kueri.
Mengonfigurasi akun layanan untuk menjalankan kueri terjadwal
Kueri saat ini dijadwalkan untuk dijalankan menggunakan kredensial Anda.
Perbarui kueri terjadwal Anda agar berjalan dengan kredensial akun layanan snapshot-bot
sebagai berikut:
Jalankan perintah
bq ls
untuk mendapatkan identitas tugas kueri terjadwal:bq ls --transfer_config=true --transfer_location=us
Outputnya terlihat mirip dengan berikut ini:
name
displayName
dataSourceId
state
projects/12345/locations/us/transferConfigs/12345
Monthly snapshots of the TABLE table
scheduled_query
RUNNING
Dengan menggunakan ID di kolom
name
, jalankan perintahbq update
berikut:bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
Cloud Shell mengonfirmasi bahwa kueri terjadwal telah berhasil diperbarui.
Periksa hasil kerja Anda:
Bagian ini menjelaskan cara memverifikasi bahwa kueri Anda dijadwalkan dengan benar, Cara melihat apakah ada error saat kueri dijalankan, dan cara memverifikasi bahwa snapshot bulanan sedang dibuat.
Melihat kueri terjadwal
Untuk memverifikasi bahwa BigQuery telah menjadwalkan kueri snapshot tabel bulanan Anda, ikuti langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman Kueri terjadwal:
Klik Snapshot bulanan tabel TABLE.
Klik Konfigurasi.
Pastikan String kueri berisi kueri Anda, dan kueri tersebut dijadwalkan untuk berjalan pada hari pertama setiap bulan.
Melihat histori pengoperasian kueri terjadwal
Setelah kueri terjadwal berjalan, Anda dapat melihat apakah kueri terjadwal berhasil dijalankan sebagai berikut:
Konsol
Di Konsol Google Cloud, buka halaman Kueri terjadwal:
Klik deskripsi kueri, Snapshot bulanan tabel TABLE.
Klik Histori dijalankan.
Anda dapat melihat tanggal dan waktu saat kueri dijalankan, apakah kueri berhasil dijalankan, dan jika tidak, error apa yang terjadi. Untuk melihat detail selengkapnya tentang operasi tertentu, klik barisnya dalam tabel Histori dijalankan. Panel Detail operasi akan menampilkan detail tambahan.
Melihat snapshot tabel
Untuk memastikan snapshot tabel dibuat, ikuti langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman BigQuery:
Di panel Penjelajah, buka set data
BACKUP
dan verifikasi bahwa snapshotTABLE_YYYYMMDD
telah dibuat, denganYYYYMMDD
adalah hari pertama setiap bulan.Contoh:
TABLE_20220601
TABLE_20220701
TABLE_20220801
Langkah berikutnya
- Untuk mengetahui informasi selengkapnya tentang snapshot tabel, lihat Bekerja dengan snapshot tabel.
- Untuk mengetahui informasi lebih lanjut tentang penjadwalan kueri, lihat Menjadwalkan kueri.
- Untuk mengetahui informasi selengkapnya tentang akun layanan Google Cloud, lihat Akun layanan.