Каков наилучший способ очистки и воссоздания таблицы данных дельтабрик?
Я пытаюсь очистить и воссоздать дельта-таблицу блоков данных для интеграционных тестов.
Я хочу запустить тесты на агенте 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 desc
formatted
schema.Tablename