Как лучше всего очистить и воссоздать дельта-таблицу Databricks?

Я пытаюсь очистить и воссоздать дельта-таблицу блоков данных для интеграционных тестов.

Я хочу запустить тесты агента DevOps, поэтому я использую JDBC (драйвер Simba), но он говорит, что тип оператора «DELETE» не поддерживается.

Когда я очищаю базовое местоположение DBFS с помощью DBFS API «rm -r», он очищает таблицу, но следующее чтение после воссоздания дает ошибку - файл, указанный в журнале транзакций, не может быть найден. Это происходит, когда данные были вручную удалены из файловой системы, а не с помощью оператора table DELETE.

Также, если я просто делаю УДАЛЕНИЕ из дельта-таблицы для данных, я все равно вижу базовый каталог dbfs и файлы без изменений. Как я могу аккуратно очистить дельту, а также базовые файлы?


person Preeti Joshi    schedule 04.04.2019    source источник
comment
Вы пробовали бросить стол?   -  person Gladiator    schedule 04.04.2019
comment
@Gladiator: да, это просто отбрасывает таблицу, но лежащие в основе паркетные файлы не удаляются. Поэтому в следующий раз, когда вы создадите таблицу и вставите данные, а затем сделаете выбор, вы увидите дубликаты.   -  person Preeti Joshi    schedule 04.04.2019
comment
записать новую таблицу в режиме overwrite   -  person Gladiator    schedule 04.04.2019


Ответы (3)


Вы можете использовать команду VACUUM для очистки. Еще не пользовался.

Если вы используете Spark, вы можете использовать опцию overwriteSchema для перезагрузки данных.

Если вы можете предоставить более подробную информацию о том, как вы его используете, было бы лучше

person Piyush Patel    schedule 04.04.2019

Вот идеальные шаги: когда вы выполняете DROP TABLE и DELETE FROM TABLE TABLE NAME, происходит следующее:

  • DROP TABLE: удаляет вашу таблицу, но данные все еще остаются. (Также вы не можете создать новое определение таблицы с изменениями в схеме в том же месте.)
  • УДАЛИТЬ ИЗ ТАБЛИЦЫ удаляет данные из таблицы, но журнал транзакций остается.

Итак, шаг 1 - DROP TABLE schema.

ШАГ 2 -% fs rm -r /mnt/path/where/your/table/definition/is/pointed/fileNames.parquet

Шаг 3 -% fs ls убедитесь, что в этом месте нет данных и журнала транзакций.

Шаг 4: СЕЙЧАС> !!!!! ПОВТОРНО ЗАПУСТИТЕ оператор CREATE TABLE с любыми изменениями, которые вы хотите UISNG delta location /mnt/path/where/your/table/definition/is/pointed/fileNames.parquet

Шаг 5. Начните использовать таблицу и проверьте, используя% sql desc formatted schema.Tablename

person Harsha TJ    schedule 04.04.2019

Убедитесь, что вы не создаете внешнюю таблицу. Есть два типа таблиц:

1) Управляемые таблицы

2) Внешние таблицы (указывается местоположение набора данных)

Когда вы удаляете управляемую таблицу, Spark отвечает за очистку метаданных этой таблицы, хранящейся в хранилище метаданных, и за очистку данных (файлов), присутствующих в этой таблице.

Но для внешней таблицы Spark не владеет данными, поэтому, когда вы удаляете внешнюю таблицу, искрой удаляются только метаданные, присутствующие в хранилище метаданных, а данные (файлы), которые присутствовали в этой таблице, не получаются < strong> удалено.

После этого, если вы подтверждаете, что ваши таблицы являются управляемыми таблицами, и все же удаление таблицы не приводит к удалению файлов, вы можете использовать команду VACUUM:

VACUUM <databaseName>.<TableName> [RETAIN NUM HOURS]

Это очистит все незафиксированные файлы из папки таблицы. Я надеюсь, это поможет вам.

person Bilal Shafqat    schedule 27.11.2019