Каков наилучший способ очистки и воссоздания дельта-таблицы databricks?

#databricks #azure-databricks #delta-lake

#databricks #azure-блоки данных #дельта-озеро #azure-databricks

Вопрос:

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

Я хочу запустить тесты в devops agent, поэтому я использую JDBC (драйвер Simba), но в нем говорится, что тип инструкции «УДАЛИТЬ» не поддерживается.

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

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

Комментарии:

1. Вы пробовали удалять таблицу?

2. @Gladiator да, это просто удаляет таблицу, но базовые файлы parquet не удаляются. Итак, в следующий раз, когда вы создаете таблицу и вставляете данные, а затем выполняете выбор, вы видите дубликаты

3. запишите новую таблицу в overwrite режиме

Ответ №1:

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

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

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

Ответ №2:

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

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

Итак, шаг 1 — УДАЛИТЕ схему ТАБЛИЦЫ.Имятаблицы

ШАГ 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

Ответ №3:

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

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

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

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

Но для внешней таблицы spark не владеет данными, поэтому при удалении внешней таблицы spark удаляет только метаданные, присутствующие в metastore, а данные (файлы), которые присутствовали в этой таблице, не удаляются.

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

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

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

Ответ №4:

 import os

path = "<Your Azure Databricks Delta Lake Folder Path>"

for delta_table in os.listdir(path):
    dbutils.fs.rm("<Your Azure Databricks Delta Lake Folder Path>"   delta_table)
  

Как найти свой <Your Azure Databricks Delta Lake Folder Path> :

Шаг 1: Перейдите к Databricks .

Шаг 2: Нажмите Data Create Table DBFS . Затем вы найдете свои дельта-таблицы.