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 produk berikut:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
Tabel yang ingin Anda ambil snapshot-nya. Anda memerlukan izin bigquery.tables.deleteSnapshot untuk membuat snapshot dengan waktu habis masa berlaku, karena habisnya masa berlaku snapshot sama dengan menghapusnya di lain waktu.
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
Salah satu dari yang berikut ini:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
Tabel yang ingin Anda ambil snapshot-nya. Hanya bigquery.dataOwner dan bigquery.admin yang dapat digunakan untuk membuat snapshot dengan waktu habis masa berlaku.
Salah satu dari yang berikut ini:

bigquery.dataEditor
bigquery.dataOwner
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.

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

    Ringkasan Klik

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

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 untuk project tempat snapshot dibuat.
    • SNAPSHOT_DATASET_NAME: nama set data tempat membuat snapshot.
    • SNAPSHOT_NAME: nama snapshot yang Anda buat.
    • TABLE_PROJECT_ID: project ID 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 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 untuk project tempat snapshot dibuat.
  • 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 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 untuk project tempat snapshot dibuat.
  • 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.

    Ringkasan Klik

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

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 untuk project tempat snapshot dibuat.
    • SNAPSHOT_DATASET_NAME: nama set data tempat membuat snapshot.
    • SNAPSHOT_NAME: nama snapshot yang Anda buat.
    • TABLE_PROJECT_ID: project ID 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 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 untuk project tempat snapshot dibuat.
  • 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 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 untuk project tempat snapshot dibuat.
  • 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