Cómo restaurar datos eliminados accidentalmente de Google BigQuery
Publicado: 2022-04-12¿Alguna vez eliminó accidentalmente una tabla importante, una vista o un conjunto de datos completo en Google BigQuery? Si es así, sabe que no puede continuar trabajando con tablas y consultas que contengan los datos eliminados.
Hemos escrito instrucciones detalladas para ayudarlo a restaurar los datos eliminados accidentalmente y no tener canas antes de lo previsto.
Tabla de contenido
- Cómo restaurar una tabla eliminada
- Cómo restaurar una vista eliminada
- Cómo restaurar un conjunto de datos eliminado
- Qué hacer para prevenir problemas similares en el futuro
- Qué hacer para reducir la escala del problema si vuelve a ocurrir
Cómo restaurar una tabla eliminada
Puede restaurar una tabla eliminada si no han pasado más de siete días desde que se eliminó y si conoce su nombre y el nombre del conjunto de datos del que se eliminó.
Para restaurar una tabla, abra la línea de comando de Cloud Shell en la interfaz de Google BigQuery:

Introduzca el siguiente comando:
bq cp mydataset.mytable@-3600000 mydataset.newtable
bq cp mydataset.mytable@-3600000 mydataset.newtable
Ejemplo del mismo comando con nombres de tablas y conjuntos de datos:
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
Donde:
- OWOXBI_Reports.123_Transactions_withModels: es el conjunto de datos y la tabla que se ha eliminado.
- OWOXBI_Reports_Restore.123_Transactions_withModels: es el conjunto de datos y el nombre de la tabla en la que desea restaurar los datos.
- @-13600000 — una distancia en el pasado (hace 13,600,000 milisegundos) cuando la tabla que buscas todavía existía. Por ejemplo, si una tabla se eliminó hace 30 minutos, es suficiente establecer el intervalo de tiempo @ -3600000, que es hace una hora (60 segundos × 60 minutos × 1000).
Después de ingresar la solicitud, se requiere autorización. Haga clic en el botón Autorizar:

Después de que el comando se ejecute con éxito, la tabla se restaurará:

Verás un texto similar a este:
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'
Cómo restaurar una vista eliminada
No puede restaurar una vista remota de la forma descrita anteriormente. Ese método solo es adecuado para tablas.
El soporte de Google recomienda usar Logs Explorer para restaurar una vista eliminada.
Para buscar consultas que actualizaron una vista remota, ejecute la siguiente consulta en los registros de 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"
Donde:
- tableservice.update — es el comando para mostrar la actualización de la vista en los registros
- custom_events_attribution_VIEW — el nombre de la vista
En la configuración Seleccionar rango de tiempo, establezca el período durante el cual se pueden realizar cambios en la vista (por ejemplo, un año):

Cuando se ejecuta el comando, se mostrarán todas las consultas que actualizaron la vista que está buscando. Seleccione la última consulta de marca de tiempo:

Copie la consulta del registro y vuelva a crear la vista.

Además, puede encontrar la consulta que creó la vista que estaba buscando (antes de eso, buscábamos consultas que actualizaran la vista). Para hacer esto, use el siguiente 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"

Le recomendamos que establezca el período más largo posible para buscar en los registros la entrada requerida.

Si se creó una vista antes de que se comenzaran a registrar los registros, no será posible restaurarla. En este caso, el comando tableservice.update que describimos anteriormente puede ayudar.
Cómo restaurar un conjunto de datos eliminado
Si elimina un conjunto de datos, no podrá restaurarlo. Debe crear un nuevo conjunto de datos con el mismo nombre, restaurar las tablas y vistas que estaban en el conjunto de datos eliminado y moverlas al nuevo conjunto de datos.
En las primeras 24 horas después de eliminar un conjunto de datos, no puede crear un nuevo conjunto de datos con el mismo nombre, pero aún puede encontrar los nombres de las tablas y vistas que formaban parte del conjunto de datos eliminado. Sin embargo, las tablas y las vistas ya no estarán visibles.
Puede buscar vistas de un conjunto de datos eliminado por nombre buscando en BigQuery:

La lista de tablas no se puede encontrar a través de la búsqueda, ya que las tablas no tienen un componente común en sus nombres.
Para encontrar un nombre de tabla de un conjunto de datos eliminado, use la siguiente consulta SQL. En la consulta, especifique el período durante el cual se pueden modificar las tablas (creation_time BETWEEN). Como resultado, la consulta devolverá tablas en las que se han realizado cambios dentro de un período de tiempo. Estas serán las tablas del conjunto de datos eliminado.
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)
Como resultado de la solicitud, recibirá la siguiente información:
- consulta — el texto de la consulta que hizo el cambio a la tabla_destino
- user_email: el usuario que inició la solicitud de actualización de destination_table
- Destination_table — la tabla que ha sido actualizada
- job_ids — el número de inicios de consulta durante el intervalo de tiempo especificado (creation_time ENTRE...)
- lastUpdateDate: la última vez que se inició la consulta (MAX(creation_time) AS lastUpdateDate)
Veinticuatro horas después de eliminar un conjunto de datos, puede crear un nuevo conjunto de datos con el mismo nombre y comenzar a restaurar tablas y vistas.
Qué hacer para prevenir problemas similares en el futuro
- Active la recopilación de registros en su proyecto de Google BigQuery cuando comience a trabajar con el proyecto.
- No nombre una tabla y vea lo mismo que un conjunto de datos.
- Vuelva a verificar el nombre de cualquier tabla que desee eliminar de Google BigQuery.
- Elimine tablas a través de consultas, no a través de la interfaz de usuario.
- Agregue el tipo de entidad a los nombres de conjuntos de datos, tablas y vistas. Por ejemplo:
- OWOXBI_report_dataset
- OWOXBI_informe_tabla
- OWOXBI_report_view
Puede eliminar una tabla mediante una consulta:
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
DROP TABLE `summer-drive-112011.OWOXBI_Reports_Restore.test_table`
También puede eliminar una vista mediante una consulta:
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
DROP VIEW `summer-drive-112011.OWOXBI_Reports_Restore.test_VIEW`
Qué hacer para reducir la escala del problema si vuelve a ocurrir
- No cambie las consultas en Schedule y Google Apps Script; al día siguiente, restaure todas las vistas y tablas, después de lo cual Schedule y Google Apps Script funcionarán correctamente.
- Si la vista o la tabla participaron en la configuración del modelo de atribución, deberá reiniciar el cálculo de atribución después de restaurar los datos a su ubicación anterior.
Enlaces útiles sobre el tema.
Restaurar tablas eliminadas
Eliminación de una tabla
Administrar vistas
Cómo recuperar instantáneamente una tabla en Google BigQuery

Nuestros clientes
crecer 22% más rápido
Crezca más rápido midiendo lo que funciona mejor en su marketing
Analice su eficiencia de marketing, encuentre las áreas de crecimiento, aumente el ROI
Obtener demostración