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

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, luaskan project dan node set data dari tabel yang ingin Anda ambil snapshot-nya.

  3. Klik nama tabel yang ingin Anda ambil snapshot-nya.

  4. Di panel tabel yang muncul, klik Snapshot.

    Klik Snapshot

  5. Di panel Create table snapshot yang muncul, masukkan informasi Project, Dataset, dan Table untuk snapshot tabel baru.

  6. Di kolom Expiration time, masukkan tanggal dan waktu 24 jam dari sekarang.

  7. Klik Save.

SQL

Gunakan pernyataan DDL CREATE SNAPSHOT TABLE:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. 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.

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

Masukkan perintah berikut di Cloud Shell:

Buka 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

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, luaskan project dan node set data dari tabel yang ingin Anda ambil snapshot-nya.

  3. Klik nama tabel yang ingin Anda ambil snapshot-nya.

  4. Di panel tabel yang muncul, klik Snapshot.

    Klik Snapshot

  5. Di panel Create table snapshot yang muncul, masukkan informasi Project, Dataset, dan Table untuk snapshot tabel baru.

  6. Di kolom Snapshot time, masukkan tanggal dan waktu untuk 1 jam yang lalu.

  7. Klik Save.

SQL

Gunakan pernyataan DDL CREATE SNAPSHOT TABLE dengan klausa FOR SYSTEM_TIME AS OF:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. 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.

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

Masukkan perintah berikut di Cloud Shell:

Buka 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