Как стать автором
Обновить

BigQuery. Что делать, если повредил или случайно удалил таблицы

Время на прочтение3 мин
Количество просмотров7.8K

BigQuery становится все более популярным инструментом для работы с данными. С ростом его распространенности все более ценными становятся и знания о нем. При этом в повседневной практике могут возникать совершенно разные ситуаций, от которых невозможно перестраховаться на 100%. Можно в частности случайно повредить, неверно дозаполнить, а может быть и вовсе уничтожить не те партиции или целую таблицу. В этой заметке мы рассмотрим способы, с помощью которых можно исправить допущенные недоразумения.

Все будет хорошо
Все будет хорошо

Если вы накосячили с данными, то первое о чем нужно помнить, это:

  1. Если вы повредили таблицу. BigQuery хранит состояние вашей существующей таблицы на любой момент времени в течение прошедших 7 дней. Так что вы можете откатиться.

  2. Если вы удалили таблицу. У вас есть 2 суток, чтобы восстановить уничтоженную таблицу с помощью специальной команды.

Можно обратиться и к официальной справке по этому вопросу, а именно к разделу "BigQuery for data warehouse practitioners" >> "Backup and recovery" - ссылка.


После осознания того, что все не так плохо, у вас есть 2 способа восстановить ваши данные: с помощью SQL запроса и с помощью специальной команды в консоли.

Ситуация 1. Таблица была повреждена неуместной операцией

Если вы не удалили таблицу, а лишь повредили ее, применив ненужную операцию, то можно восстановить ее состояние на любой момент времени в течение последних 7 дней, как мы и писали ранее. Для этого нужно всего лишь написать довольно простой SQL запрос.

Пример для случая, когда вы уверены, что еще 1 час назад таблица была “нормальной”.

CREATE OR REPLACE TABLE
  `имя_проекта.имя_датасета.имя_таблицы`
AS


SELECT
    *
FROM
  `имя_проекта.имя_датасета.имя_таблицы`
FOR SYSTEM_TIME AS OF
TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

Вместо  `INTERVAL 1 HOUR` конечно можно написать любое число часов в пределах 168 или, например, `INTERVAL 1 DAY` , если ваши повреждения замечены поздно. Можно также и не восстанавливать таблицу сразу, а посмотреть на результат выдачи, само собой не используя первую часть запроса `CREATE OR REPLACE`.

Ситуация 2. Партицированная таблица была повреждена неуместной операцией

Если вам нужно восстановить состояние партицированной таблицы, где обязательным условием является указание некоего значения колонки, по которой таблица партицирована, то и с таким кейсом можно справиться. В этом случае вам нужно написать запрос вот такого вида:

CREATE OR REPLACE TABLE
    `имя_проекта.имя_датасета.имя_таблицы`
PARTITION BY
    event_date
OPTIONS (require_partition_filter=TRUE) AS


SELECT
    *
FROM
    `имя_проекта.имя_датасета.имя_таблицы`
FOR SYSTEM_TIME AS OF
TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
WHERE
    event_date <= CURRENT_DATE()

Ситуация 3. Таблица была случайно удалена

Помните, что у вас есть 2 суток, чтобы исправить эту ситуацию. Чтобы восстановить удаленную таблицу, нужно открыть консоль, нажав ‘Activate Cloud Shell’ в правом верхнем углу, как это показано на картинке ниже.

Activate Cloud Shell
Activate Cloud Shell

После этого в нижней части экрана откроется консоль, где можно будет писать команды для восстановления таблиц. При возврате удаленной таблицы, нужно указать момент, когда эта таблица существовала, но в микросекундах. Также у вас есть выбор: или просто восстановить таблицу или сохранить ее в какую-то новую без восстановления старой. Например, можно потренироваться сохраняя ее в виде тестовой, прежде чем точно правильно восстановить старую на ее прежнем месте.

При простом восстановлении ваша команда в консоли будет выглядеть примерно так:

bq cp имя_датасета.имя_таблицы@1665946435000 имя_датасета.имя_таблицы

где цифры 1665946435000 будут обозначать ваш момент времени в соответствии с Unix Timestamp.

Если вы хотите сохранить старую восстановленную таблицу под новым именем, то ваша команда будет выглядеть как:

bq cp имя_датасета.имя_таблицы@1665946435000 имя_датасета.имя_новой_таблицы

где цифры 1665946435000 будут обозначать ваш момент времени в соответствии с Unix Timestamp.

После ввода этой команды у вас появится строка, где нужно нажать ‘y’, что означает что вы подтверждаете операцию.

Вот пример того, как это может выглядеть в вашей консоли:

Запуск и ответ на команду в нашей консоли
Запуск и ответ на команду в нашей консоли

Вот и все, ваша удаленная таблица успешно восстановлена.


Подводя итог, хочется сказать, что удаление или повреждение вашей таблицы не такая критичная проблема, если вы успели уложиться в 7 дней для таблицы, которую повредили, и в 2 дня для таблицы, которую по ошибке удалили. Все эти команды выручали нас не один раз. Надеюсь, что они помогут и вам восстановить все без потерь.

Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии12

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань