Come ripristinare i dati cancellati accidentalmente da Google BigQuery

Pubblicato: 2022-04-12

Hai mai eliminato accidentalmente una tabella, una vista o un intero set di dati importante in Google BigQuery? In tal caso, sai che non puoi continuare a lavorare con tabelle e query contenenti i dati eliminati.

Abbiamo scritto istruzioni dettagliate per aiutarti a ripristinare i dati eliminati accidentalmente e a non avere capelli grigi prima del previsto.

Sommario

  • Come ripristinare una tabella eliminata
  • Come ripristinare una vista eliminata
  • Come ripristinare un set di dati cancellato
  • Cosa fare per prevenire problemi simili in futuro
  • Cosa fare per ridurre la portata del problema se si ripresenta

Come ripristinare una tabella eliminata

Puoi ripristinare una tabella eliminata se non sono trascorsi più di sette giorni dall'eliminazione e se ne conosci il nome e il nome del set di dati da cui è stata eliminata.

Per ripristinare una tabella, apri la riga di comando di Cloud Shell nell'interfaccia di Google BigQuery:

Immettere il seguente comando:

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

Esempio dello stesso comando con nomi di tabelle e set di dati:

    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

In cui si:

  • OWOXBI_Reports.123_Transactions_withModels — è il set di dati e la tabella che sono stati eliminati.
  • OWOXBI_Reports_Restore.123_Transactions_withModels — è il set di dati e il nome della tabella al suo interno in cui si desidera ripristinare i dati.
  • @-13600000 — una distanza nel passato (13.600.000 millisecondi fa) quando il tavolo che stai cercando esisteva ancora. Ad esempio, se una tabella è stata eliminata 30 minuti fa, è sufficiente impostare l'intervallo di tempo @ -3600000, ovvero un'ora fa (60 secondi × 60 minuti × 1000).

Dopo aver inserito la richiesta, è necessaria l'autorizzazione. Fare clic sul pulsante Autorizza:

Dopo che il comando è stato eseguito correttamente, la tabella verrà ripristinata:

Vedrai un testo simile a questo:

    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' 

Come ripristinare una vista eliminata

Non è possibile ripristinare una vista remota nel modo descritto sopra. Questo metodo è adatto solo per le tabelle.

Il supporto di Google consiglia di utilizzare Logs Explorer per ripristinare una vista eliminata.

Per trovare le query che hanno aggiornato una vista remota, esegui la seguente query nei log di 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"

In cui si:

  • tableservice.update — è il comando per visualizzare l'aggiornamento della vista nei log
  • custom_events_attribution_VIEW — il nome della vista

Nelle impostazioni Seleziona intervallo di tempo, impostare il periodo durante il quale è possibile apportare modifiche alla vista (ad esempio, un anno):

Quando il comando viene eseguito, verranno visualizzate tutte le query che hanno aggiornato la vista che stai cercando. Seleziona l'ultima query timestamp:

Copia la query dal registro e ricrea la vista.

Inoltre, puoi trovare la query che ha creato la vista che stavi cercando (prima di ciò, abbiamo cercato le query che aggiornavano la vista). Per fare ciò, utilizzare il seguente comando:

    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" 

Si consiglia di impostare il periodo più lungo possibile per la ricerca nei registri della voce richiesta.

Se una vista è stata creata prima dell'inizio della registrazione dei log, non sarà possibile ripristinarla. In questo caso, il comando tableservice.update che abbiamo descritto sopra può aiutare.

Come ripristinare un set di dati cancellato

Se elimini un set di dati, non sarai in grado di ripristinarlo. È necessario creare un nuovo set di dati con lo stesso nome, ripristinare le tabelle e le viste che erano nel set di dati eliminato e spostarle nel nuovo set di dati.

Nelle prime 24 ore dopo l'eliminazione di un set di dati, non è possibile creare un nuovo set di dati con lo stesso nome, ma è comunque possibile trovare i nomi di tabelle e viste che facevano parte del set di dati eliminato. Tuttavia, le tabelle e le viste stesse non saranno più visibili.

Puoi trovare le visualizzazioni da un set di dati eliminato per nome effettuando una ricerca in BigQuery:

L'elenco delle tabelle non può essere trovato tramite la ricerca, poiché le tabelle non hanno una componente comune nei loro nomi.

Per trovare il nome di una tabella da un set di dati eliminato, utilizzare la seguente query SQL. Nella query, specificare il periodo durante il quale le tabelle possono essere modificate (creation_time BETWEEN). Di conseguenza, la query restituirà tabelle a cui sono state apportate modifiche entro quale periodo di tempo. Queste saranno le tabelle dal set di dati cancellato.

    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)

A seguito della richiesta, riceverai le seguenti informazioni:

  • query: il testo della query che ha apportato la modifica a tabella_destinazione
  • user _email — l'utente che ha avviato la richiesta di aggiornamento della tabella_destinazione
  • tabella_destinazione — la tabella che è stata aggiornata
  • job_ids — il numero di query avviate durante l'intervallo di tempo specificato (creation_time BETWEEN …)
  • lastUpdateDate — l'ultima volta che è stata avviata la query (MAX(creation_time) AS lastUpdateDate)

Ventiquattro ore dopo aver eliminato un set di dati, puoi creare un nuovo set di dati con lo stesso nome e iniziare a ripristinare tabelle e viste.

Cosa fare per prevenire problemi simili in futuro

  1. Attiva la raccolta dei log nel tuo progetto Google BigQuery quando inizi a lavorare con il progetto.
  2. Non assegnare un nome a una tabella e visualizzare come un set di dati.
  3. Ricontrolla il nome di qualsiasi tabella che desideri eliminare da Google BigQuery.
  4. Elimina le tabelle tramite query, non tramite l'interfaccia utente.
  5. Aggiungi il tipo di entità ai nomi di set di dati, tabelle e viste. Per esempio:
    1. OWOXBI_report_set di dati
    2. OWOXBI_report_table
    3. OWOXBI_report_view

Puoi eliminare una tabella utilizzando una query:

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

Puoi anche eliminare una vista utilizzando una query:

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

Cosa fare per ridurre la portata del problema se si ripresenta

  • Non modificare le query in Pianificazione e Google Apps Script; il giorno successivo, ripristina tutte le viste e le tabelle, dopodiché Schedule e Google Apps Script funzioneranno correttamente.
  • Se la vista o la tabella sono state coinvolte nell'impostazione del modello di attribuzione, dovrai riavviare il calcolo dell'attribuzione dopo aver ripristinato i dati nella posizione precedente.

Link utili sull'argomento

Ripristino delle tabelle cancellate

Eliminazione di una tabella

Gestione delle visualizzazioni

Come recuperare istantaneamente una tabella in Google BigQuery

I nostri clienti
crescere 22% più veloce

Cresci più velocemente misurando ciò che funziona meglio nel tuo marketing

Analizza la tua efficienza di marketing, trova le aree di crescita, aumenta il ROI

Ottieni una demo