Cara memulihkan data yang tidak sengaja terhapus dari Google BigQuery

Diterbitkan: 2022-04-12

Pernahkah Anda secara tidak sengaja menghapus tabel, tampilan, atau seluruh kumpulan data penting di Google BigQuery? Jika sudah, Anda tahu bahwa Anda tidak dapat melanjutkan bekerja dengan tabel dan kueri yang berisi data yang dihapus.

Kami telah menulis instruksi terperinci untuk membantu Anda memulihkan data yang terhapus secara tidak sengaja dan tidak mendapatkan uban lebih cepat dari jadwal.

Daftar Isi

  • Cara mengembalikan tabel yang dihapus
  • Cara mengembalikan tampilan yang dihapus
  • Cara mengembalikan kumpulan data yang dihapus
  • Apa yang harus dilakukan untuk mencegah masalah serupa di masa depan
  • Apa yang harus dilakukan untuk mengurangi skala masalah jika itu terjadi lagi?

Cara mengembalikan tabel yang dihapus

Anda dapat memulihkan tabel yang dihapus jika belum lebih dari tujuh hari sejak dihapus dan jika Anda mengetahui namanya dan nama kumpulan data dari mana tabel tersebut dihapus.

Untuk memulihkan tabel, buka baris perintah Cloud Shell di antarmuka Google BigQuery:

Masukkan perintah berikut:

    bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable

Contoh perintah yang sama dengan nama tabel dan dataset:

    bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels
bq cp OWOXBI_Reports.123_Transactions_withModels@-13600000 OWOXBI_Reports_Restore.123_Transactions_withModels

Di mana:

  • OWOXBI_Reports.123_Transactions_withModels — adalah kumpulan data dan tabel yang telah dihapus.
  • OWOXBI_Reports_Restore.123_Transactions_withModels — adalah kumpulan data dan nama tabel di dalamnya tempat Anda ingin memulihkan data.
  • @-1360000 — jarak di masa lalu (13.600.000 milidetik yang lalu) saat tabel yang Anda cari masih ada. Misalnya, jika sebuah tabel dihapus 30 menit yang lalu, cukup untuk mengatur interval waktu @ -3600000, yaitu satu jam yang lalu (60 detik ×60 menit × 1000).

Setelah memasukkan permintaan, otorisasi diperlukan. Klik tombol Otorisasi:

Setelah perintah berhasil dijalankan, tabel akan dipulihkan:

Anda akan melihat teks yang mirip dengan ini:

    Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table'
Waiting on bqjob_r4ca30008c2e3147d_0000017af0d58e5e_1 ... (0s) Current status: DONE Table 'summer-drive-112011:OWOXBI_Reports_Restore.test_table@-600000' successfully copied to 'summer-drive-112011:OWOXBI_Reports_Restore.test_table' 

Cara mengembalikan tampilan yang dihapus

Anda tidak dapat memulihkan tampilan jarak jauh dengan cara yang dijelaskan di atas. Metode itu hanya cocok untuk tabel.

Dukungan Google merekomendasikan penggunaan Logs Explorer untuk memulihkan tampilan yang dihapus.

Untuk menemukan kueri yang memperbarui tampilan jarak jauh, jalankan kueri berikut di log Google Cloud Platform:

    resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.update" protoPayload.serviceData.tableUpdateRequest.resource.tableName.tableId="custom_events_attribution_VIEW"

Di mana:

  • tableservice.update — adalah perintah untuk menampilkan pembaruan tampilan di log
  • custom_events_attribution_VIEW — nama tampilan

Dalam pengaturan Pilih rentang waktu, atur periode di mana perubahan dapat dilakukan pada tampilan (misalnya, satu tahun):

Saat perintah dijalankan, semua kueri yang memperbarui tampilan yang Anda cari akan ditampilkan. Pilih kueri stempel waktu terakhir:

Salin kueri dari log dan buat ulang tampilan.

Selain itu, Anda dapat menemukan kueri yang membuat tampilan yang Anda cari (sebelumnya, kami menelusuri kueri yang memperbarui tampilan). Untuk melakukannya, gunakan perintah berikut:

    resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW"
resource.type="bigquery_resource" protoPayload.methodName="tableservice.insert" protoPayload.serviceData.tableInsertRequest.resource.tableName.tableId="query_name_VIEW" 

Kami menyarankan Anda menetapkan periode terpanjang yang memungkinkan untuk mencari entri yang diperlukan di log.

Jika tampilan dibuat sebelum log mulai direkam, tidak mungkin untuk memulihkannya. Dalam hal ini, perintah tableservice.update yang kami jelaskan di atas dapat membantu.

Cara mengembalikan kumpulan data yang dihapus

Jika Anda menghapus kumpulan data, Anda tidak akan dapat memulihkannya. Anda harus membuat kumpulan data baru dengan nama yang sama, memulihkan tabel dan tampilan yang ada di kumpulan data yang dihapus, dan memindahkannya ke kumpulan data baru.

Dalam 24 jam pertama setelah menghapus kumpulan data, Anda tidak dapat membuat kumpulan data baru dengan nama yang sama, tetapi Anda masih dapat menemukan nama tabel dan tampilan yang merupakan bagian dari kumpulan data yang dihapus. Namun, tabel dan tampilan itu sendiri tidak akan terlihat lagi.

Anda dapat menemukan tampilan dari set data yang dihapus berdasarkan nama dengan menelusuri di BigQuery:

Daftar tabel tidak dapat ditemukan melalui pencarian, karena tabel tidak memiliki komponen umum dalam namanya.

Untuk menemukan nama tabel dari kumpulan data yang dihapus, gunakan kueri SQL berikut. Dalam kueri, tentukan periode di mana tabel dapat dimodifikasi (creation_time BETWEEN). Akibatnya, kueri akan mengembalikan tabel yang telah diubah dalam jangka waktu tertentu. Ini akan menjadi tabel dari dataset yang dihapus.

    SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)
SELECT * FROM ( SELECT query, user_email, CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) AS destination_table, COUNT(job_id) AS job_ids, MAX(creation_time) AS lastUpdateDate FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY) AND TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 0 DAY) AND state = 'DONE' AND CONCAT(destination_table.project_id,".",destination_table.dataset_id,".",destination_table.table_id) LIKE "%OWOXBI_Reports.%" GROUP BY 1, 2, 3 ORDER BY 5 DESC)

Sebagai hasil dari permintaan tersebut, Anda akan menerima informasi berikut:

  • kueri — teks kueri yang membuat perubahan ke destination_table
  • user _email — pengguna yang memulai permintaan pembaruan destination_table
  • destination_table — tabel yang telah diperbarui
  • job_ids — jumlah kueri yang dimulai selama interval waktu yang ditentukan (waktu_penciptaan ANTARA ...)
  • lastUpdateDate — terakhir kali kueri dimulai (MAX(creation_time) AS lastUpdateDate)

Dua puluh empat jam setelah Anda menghapus kumpulan data, Anda dapat membuat kumpulan data baru dengan nama yang sama dan mulai memulihkan tabel dan tampilan.

Apa yang harus dilakukan untuk mencegah masalah serupa di masa depan

  1. Aktifkan pengumpulan log di proyek Google BigQuery Anda saat Anda mulai bekerja dengan proyek tersebut.
  2. Jangan beri nama tabel dan tampilannya sama dengan kumpulan data.
  3. Periksa kembali nama tabel yang ingin Anda hapus dari Google BigQuery.
  4. Hapus tabel melalui kueri, bukan melalui antarmuka pengguna.
  5. Tambahkan tipe entitas ke set data, tabel, dan nama tampilan. Sebagai contoh:
    1. OWOXBI_report_dataset
    2. OWOXBI_laporan_tabel
    3. OWOXBI_report_view

Anda dapat menghapus tabel menggunakan kueri:

    DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`

Anda juga dapat menghapus tampilan menggunakan kueri:

    DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW` 

Apa yang harus dilakukan untuk mengurangi skala masalah jika itu terjadi lagi?

  • Jangan ubah kueri di Skrip Jadwal dan Google Apps; keesokan harinya, pulihkan semua tampilan dan tabel, setelah itu Jadwal dan Skrip Google Apps akan berfungsi dengan benar.
  • Jika tampilan atau tabel terlibat dalam menyiapkan model atribusi, Anda harus memulai ulang penghitungan atribusi setelah memulihkan data ke lokasi sebelumnya.

Tautan yang berguna tentang topik

Memulihkan tabel yang dihapus

Menghapus tabel

Mengelola tampilan

Cara memulihkan tabel secara instan di Google BigQuery

Klien kami
tumbuh 22% lebih cepat

Tumbuh lebih cepat dengan mengukur apa yang paling berhasil dalam pemasaran Anda

Analisis efisiensi pemasaran Anda, temukan area pertumbuhan, tingkatkan ROI

Dapatkan demo