Membuat snapshot tabel

Dokumen ini menjelaskan cara membuat snapshot tabel menggunakan Google Cloud konsol, pernyataan SQL CREATE SNAPSHOT TABLE, perintah 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 hal berikut:

bigquery.tables.get
bigquery.tables.getData
bigquery.tables.createSnapshot
bigquery.datasets.get
bigquery.jobs.create
Tabel yang ingin Anda snapshot. Karena masa berlaku snapshot menghapus snapshot di lain waktu, untuk membuat snapshot dengan waktu habis masa berlaku, Anda harus memiliki bigquery.tables.deleteSnapshot izin.
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 hal berikut:

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner

Dan setidaknya salah satu hal berikut:

bigquery.jobUser
bigquery.studioUser
bigquery.user
bigquery.studioAdmin
bigquery.admin
Tabel yang ingin Anda snapshot. Hanya bigquery.dataOwner, bigquery.admin, dan bigquery.studioAdmin yang dapat digunakan untuk membuat snapshot dengan waktu habis masa berlaku.
Setidaknya salah satu hal berikut:

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 memiliki kunci enkripsi default set data tujuan. Saat membuat snapshot tabel menggunakan SQL, snapshot 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 Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel kiri, klik Explorer:

    Tombol yang ditandai untuk panel Explorer.

    Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.

  3. Di panel Explorer, luaskan project Anda, klik Datasets, lalu klik set data.

  4. Klik Overview > Tables, lalu klik nama tabel yang ingin Anda snapshot.

  5. Di panel detail yang muncul, klik Snapshot.

    Screenshot yang menampilkan tombol Snapshot di konsol BigQuery.

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

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

  8. Klik Save.

SQL

Gunakan pernyataan DDL CREATE SNAPSHOT TABLE:

  1. Di Google Cloud konsol, 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: ID project dari project tempat untuk membuat snapshot.
    • SNAPSHOT_DATASET_NAME: nama set data tempat untuk membuat snapshot.
    • SNAPSHOT_NAME: nama snapshot yang Anda buat.
    • TABLE_PROJECT_ID: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
    • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
    • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.
    • TIMESTAMP_VALUE: Nilai stempel waktu yang mewakili tanggal dan waktu 24 jam dari sekarang.

  3. Klik Run.

Untuk mengetahui 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: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.
  • SNAPSHOT_PROJECT_ID: ID project dari project tempat untuk membuat snapshot.
  • SNAPSHOT_DATASET_NAME: nama set data tempat untuk 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: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.
  • SNAPSHOT_PROJECT_ID: ID project dari project tempat untuk membuat snapshot.
  • SNAPSHOT_DATASET_NAME: nama set data tempat untuk 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 Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel kiri, klik Explorer:

    Tombol yang ditandai untuk panel Explorer.

  3. Di panel Explorer, luaskan project Anda, klik Datasets, lalu klik set data.

  4. Klik Overview > Tables, lalu klik nama tabel yang ingin Anda snapshot.

  5. Di panel detail yang muncul, klik Snapshot.

    Screenshot yang menampilkan tombol Snapshot di konsol BigQuery.

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

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

  8. Klik Save.

SQL

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

  1. Di Google Cloud konsol, 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: ID project dari project tempat untuk membuat snapshot.
    • SNAPSHOT_DATASET_NAME: nama set data tempat untuk membuat snapshot.
    • SNAPSHOT_NAME: nama snapshot yang Anda buat.
    • TABLE_PROJECT_ID: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
    • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
    • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.

  3. Klik Run.

Untuk mengetahui 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: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.
  • SNAPSHOT_PROJECT_ID: ID project dari project tempat untuk membuat snapshot.
  • SNAPSHOT_DATASET_NAME: nama set data tempat untuk 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: ID project dari project yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_DATASET_NAME: nama set data yang berisi tabel yang Anda buat snapshot-nya.
  • TABLE_NAME: nama tabel yang Anda buat snapshot-nya.
  • SNAPSHOT_PROJECT_ID: ID project dari project tempat untuk membuat snapshot.
  • SNAPSHOT_DATASET_NAME: nama set data tempat untuk 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 Mengontrol akses ke resource dengan IAM.

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 tersebut ditentukan oleh kebijakan akses dari set data tempat snapshot tabel dibuat. Selain itu, tag di salin dari tabel dasar ke snapshot tabel.

Langkah berikutnya