Google BigQuery'den yanlışlıkla silinen veriler nasıl geri yüklenir

Yayınlanan: 2022-04-12

Google BigQuery'deki önemli bir tabloyu, görünümü veya tüm veri kümesini yanlışlıkla sildiniz mi? Varsa, silinen verileri içeren tablolar ve sorgularla çalışmaya devam edemeyeceğinizi biliyorsunuz.

Yanlışlıkla silinen verileri geri yüklemenize ve planlanandan önce gri saçlar almamanıza yardımcı olacak ayrıntılı talimatlar yazdık.

İçindekiler

  • Silinen bir tablo nasıl geri yüklenir
  • Silinen bir görünüm nasıl geri yüklenir
  • Silinen bir veri kümesi nasıl geri yüklenir
  • Gelecekte benzer sorunları önlemek için ne yapmalı
  • Tekrar olursa sorunun ölçeğini azaltmak için ne yapılmalı?

Silinen bir tablo nasıl geri yüklenir

Silindiği tablonun silinmesinin üzerinden yedi günden fazla geçmediyse ve adını ve silindiği veri kümesinin adını biliyorsanız, silinen bir tabloyu geri yükleyebilirsiniz.

Bir tabloyu geri yüklemek için Google BigQuery arayüzünde Cloud Shell komut satırını açın:

Aşağıdaki komutu girin:

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

Tablo ve veri kümesi adlarıyla aynı komutun örneği:

    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

Neresi:

  • OWOXBI_Reports.123_Transactions_withModels — silinen veri kümesi ve tablodur.
  • OWOXBI_Reports_Restore.123_Transactions_withModels — veri kümesi ve içindeki verileri geri yüklemek istediğiniz tablonun adıdır.
  • @-13600000 — aradığınız tablonun hala var olduğu geçmişteki (13.600.000 milisaniye önce) bir mesafe. Örneğin, bir tablo 30 dakika önce silinmişse, bir saat önce olan @ -3600000 zaman aralığını (60 saniye × 60 dakika × 1000) ayarlamak yeterlidir.

İsteği girdikten sonra, yetkilendirme gereklidir. Yetkilendir düğmesini tıklayın:

Komut başarıyla çalıştırıldıktan sonra tablo geri yüklenecektir:

Şuna benzer bir metin göreceksiniz:

    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' 

Silinen bir görünüm nasıl geri yüklenir

Uzak bir görünümü yukarıda açıklanan şekilde geri yükleyemezsiniz. Bu yöntem sadece tablolar için uygundur.

Google desteği, silinen bir görünümü geri yüklemek için Günlük Gezgini'nin kullanılmasını önerir.

Uzaktan görünümü güncelleyen sorguları bulmak için Google Cloud Platform günlüklerinde aşağıdaki sorguyu çalıştırın:

    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"

Neresi:

  • tableservice.update — günlüklerde görünüm güncellemesini görüntülemek için kullanılan komuttur
  • custom_events_attribution_VIEW — görünümün adı

Zaman aralığı seç ayarlarında, görünümde değişikliklerin yapılabileceği süreyi ayarlayın (örneğin, bir yıl):

Komut yürütüldüğünde, aradığınız görünümü güncelleyen tüm sorgular görüntülenecektir. Son zaman damgası sorgusunu seçin:

Sorguyu günlükten kopyalayın ve görünümü yeniden oluşturun.

Ayrıca, aradığınız görünümü oluşturan sorguyu bulabilirsiniz (bundan önce görünümü güncelleyen sorguları aradık). Bunu yapmak için aşağıdaki komutu kullanın:

    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" 

Gerekli giriş için günlükleri aramak için mümkün olan en uzun süreyi ayarlamanızı öneririz.

Günlükler kaydedilmeye başlamadan önce bir görünüm oluşturulduysa, geri yüklemek mümkün olmayacaktır. Bu durumda yukarıda anlattığımız tableservice.update komutu yardımcı olabilir.

Silinen bir veri kümesi nasıl geri yüklenir

Bir veri kümesini silerseniz, onu geri yükleyemezsiniz. Aynı ada sahip yeni bir veri kümesi oluşturmanız, silinen veri kümesindeki tabloları ve görünümleri geri yüklemeniz ve bunları yeni veri kümesine taşımanız gerekir.

Bir veri kümesini sildikten sonraki ilk 24 saat içinde aynı ada sahip yeni bir veri kümesi oluşturamazsınız, ancak yine de silinen veri kümesinin parçası olan tabloların ve görünümlerin adlarını bulabilirsiniz. Ancak tabloların ve görünümlerin kendileri artık görünmeyecektir.

BigQuery'de arama yaparak silinen bir veri kümesindeki görünümleri ada göre bulabilirsiniz:

Tabloların adlarında ortak bir bileşen bulunmadığından, tablo listesi arama yoluyla bulunamaz.

Silinen bir veri kümesinden bir tablo adı bulmak için aşağıdaki SQL sorgusunu kullanın. Sorguda, tabloların değiştirilebileceği süreyi belirtin (creation_time BETWEEN). Sonuç olarak sorgu, hangi zaman diliminde değişiklik yapılmış tabloları döndürür. Bunlar, silinen veri kümesindeki tablolar olacaktır.

    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)

İsteğin bir sonucu olarak, aşağıdaki bilgileri alacaksınız:

  • sorgu — target_table'da değişiklik yapan sorgunun metni
  • user _email — target_table güncelleme isteğini başlatan kullanıcı
  • target_table — güncellenen tablo
  • job_ids — belirtilen zaman aralığında başlayan sorgu sayısı (creation_time BETWEEN…)
  • lastUpdateDate — sorgunun en son başlatıldığı tarih (MAX(creation_time) AS lastUpdateDate)

Bir veri kümesini sildikten yirmi dört saat sonra, aynı ada sahip yeni bir veri kümesi oluşturabilir ve tabloları ve görünümleri geri yüklemeye başlayabilirsiniz.

Gelecekte benzer sorunları önlemek için ne yapmalı

  1. Projeyle çalışmaya başladığınızda Google BigQuery projenizde günlük toplamayı açın.
  2. Bir tabloyu adlandırmayın ve aynısını bir veri kümesi olarak görüntülemeyin.
  3. Google BigQuery'den silmek istediğiniz herhangi bir tablonun adını iki kez kontrol edin.
  4. Tabloları kullanıcı arabirimi aracılığıyla değil, sorgular aracılığıyla silin.
  5. Varlık türünü veri kümesine, tabloya ve görünüm adlarına ekleyin. Örneğin:
    1. OWOXBI_rapor_veri kümesi
    2. OWOXBI_report_table
    3. OWOXBI_report_view

Bir sorgu kullanarak bir tabloyu silebilirsiniz:

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

Bir sorgu kullanarak da bir görünümü silebilirsiniz:

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

Tekrar olursa sorunun ölçeğini azaltmak için ne yapılmalı?

  • Program ve Google Apps Komut Dosyasındaki sorguları değiştirmeyin; ertesi gün, tüm görünümleri ve tabloları geri yükleyin, ardından Program ve Google Apps Komut Dosyası doğru şekilde çalışacaktır.
  • İlişkilendirme modelinin kurulumunda görünüm veya tablo yer aldıysa, verileri önceki konumuna geri yükledikten sonra ilişkilendirme hesaplamasını yeniden başlatmanız gerekir.

Konuyla ilgili faydalı bağlantılar

Silinen tabloları geri yükleme

Tablo silme

Görünümleri yönetme

Google BigQuery'de bir tablo nasıl anında kurtarılır

Müşterilerimiz
büyümek %22 daha hızlı

Pazarlamanızda en çok neyin işe yaradığını ölçerek daha hızlı büyüyün

Pazarlama verimliliğinizi analiz edin, büyüme alanlarını bulun, yatırım getirisini artırın

Demo alın