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

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

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

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

Также, если я просто делаю DELETE из дельта-таблицы данных, я все равно вижу базовый каталог dbfs и файлы без изменений. Как я могу изящно очистить дельту и нижележащие файлы?

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. Затем вы найдете свои дельта-таблицы.

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

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

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

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

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

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

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

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

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

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

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

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

  • DROP TABLE: удаляет вашу таблицу, но данные все еще находятся.(Также вы не можете создать новое определение таблицы с изменениями в схеме в том же месте.)
  • DELETE FROM TABLE удаляет данные из таблицы, но журнал транзакций все еще находится.

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

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

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

Шаг 4: СЕЙЧАС>!!!!! RE_RUN ваше заявление CREATE TABLE с любыми изменениями, которые вы хотите UISNG delta location/mnt/path/where/your/table/definition/is/pointed/fileNames.parquet

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

Другие вопросы по тегам