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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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 дня для таблицы, которую по ошибке удалили. Все эти команды выручали нас не один раз. Надеюсь, что они помогут и вам восстановить все без потерь.

Источник: https://habr.com/ru/post/693664/


Интересные статьи

Интересные статьи

Привет, Хабр! Сегодня снова речь пойдёт о наболевшем: об экономике компьютерных закупок. Компании, планирующие расширение ИТ-систем на начало 2022 года, нуждаются в новых мощностях. А чтобы их получит...
Хоть кому-то и может показаться, что веб-разработчик — это суровый технарь (айтишник же!), вход в эту профессию не сложнее, чем в Python . В неё часто переходят...
Представьте, что однажды Вы приходите на любимую работу, но начальник встречает Вас нервно, напряжен как струна, и, вызвав Вас к себе, объявляет Вам, что Вы уволены. Вам это объявление ...
Большинство Scrum команд, с которыми я встречался, не занимаются уточнением своего продуктового бэклога и пытаются делать задачи, которые они понимают не до конца. Если в...
Элита программисты или нет, достойны они сверхвысоких зарплат и заслуживают ли особого отношения — вопрос спорный. Очевидно только то, что программист — профессия немасштабируемая, поэтому сравне...