Проблема ВОССТАНОВЛЕНИЯ озера Дельта (Databricks)

Я работаю над базами данных Azure и создал дельта-таблицу на ADLS Gen2.

У меня уже создано 4 варианта дельтовидного озера.

Я пытаюсь восстановить версию 2 с помощью следующей команды.

%sql
RESTORE TABLE Sales TO VERSION AS OF 2

Может ли кто-нибудь сообщить мне, почему я не могу восстановить старую версию? Ошибка, как показано ниже, происходит сейчас.

Error in SQL statement: ParseException: 
extraneous input 'RESTORE' expecting {'(', 'CONVERT', 'COPY', 'OPTIMIZE', 'ADD', 'ALTER', 'ANALYZE', 'CACHE', 'CLEAR', 'COMMENT', 'COMMIT', 'CREATE', 'DELETE', 'DESC', 'DESCRIBE', 'DFS', 'DROP', 'EXPLAIN', 'EXPORT', 'FROM', 'GRANT', 'IMPORT', 'INSERT', 'LIST', 'LOAD', 'LOCK', 'MAP', 'MERGE', 'MSCK', 'REDUCE', 'REFRESH', 'REPLACE', 'RESET', 'REVOKE', 'ROLLBACK', 'SELECT', 'SET', 'SHOW', 'START', 'TABLE', 'TRUNCATE', 'UNCACHE', 'UNLOCK', 'UPDATE', 'USE', 'VALUES', 'WITH'}(line 1, pos 0)

== SQL ==
RESTORE TABLE Sales TO VERSION AS OF 2

person Lilly    schedule 11.01.2021    source источник


Ответы (1)


Убедитесь, что вы используете правильную версию Databricks Runtime. Согласно документации он доступен, начиная с DBR. Только 7.4, а не в более ранних версиях. Я только что проверил DBR 7.5, и он отлично работает

Если вы используете более ранние версии Databricks Runtime, вы можете использовать INSERT OVERWRITE оператор с выбором конкретной версии таблицы:

insert overwrite <table> SELECT * FROM <table> VERSION AS OF <version>

Или другой вариант - использовать ОБРЕЗАТЬ ТАБЛИЦУ + ВСТАВИТЬ В:

truncate table <table>;
INSERT INTO <table> SELECT * FROM <table> VERSION AS OF <version>
person Alex Ott    schedule 11.01.2021
comment
Спасибо @Alex Ott. Моя версия выполнения Databricks - 7.3, и я попытался вставить перезапись, как вы упомянули. Это вызывает у меня следующую ошибку Ошибка в операторе SQL: AnalysisException: Table default.Sales не поддерживает динамическую перезапись в пакетном режиме. ;; - person Lilly; 11.01.2021
comment
Мне пришлось удалить таблицу, а затем ВСТАВИТЬ В ‹table› SELECT * из ‹table› VERSION AS OF 2 для восстановления в более ранней версии. - person Lilly; 11.01.2021
comment
Я только что проверил DBR 7.3, и insert overwrite работает нормально. Но я обновил ответ с пометкой о truncate + insert into. Ваша проблема связана с поддержкой перезаписи динамического раздела в Delta: github.com/delta- io / delta / issues / 348 - person Alex Ott; 11.01.2021
comment
Ok. Спасибо. Я только что проверил ваш обновленный ответ. - person Lilly; 11.01.2021
comment
Спасибо за обновление вашего решения, оно отлично работает. Как сделать перезапись в DBR 7.3? Должен ли я настраивать какие-либо проверки разделения при создании таблицы? Все еще не понимаю, почему вставка перезаписи не работает для меня. - person Lilly; 11.01.2021
comment
это связано с разделением таблицы - я связал проблему с Github по этому поводу. Я предлагаю передать это вашему архитектору решений, чтобы исправить это правильно ... - person Alex Ott; 11.01.2021
comment
Спасибо за ваши предложения. Truncate + insert работает и скоро обновит DBR. - person Lilly; 11.01.2021