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