Поделиться через


REPAIR TABLE

Применяется к:отмечен флажок Databricks SQL отмечен флажок Databricks Runtime

Эта команда восстанавливает или изменяет секции для таблиц.

Используйте условие SYNC METADATA с Delta Lake для обновления службы каталога на основе метаданных таблицы или для создания метаданных Iceberg для таблиц, настроенных для чтения с помощью Iceberg. Не используйте SYNC METADATA при изменении секций для таблиц, отличных от Delta Lake.

Поддерживаемые функции зависят от того, регистрируются ли таблицы в каталоге Unity или хранилище метаданных Hive, а также от того, поддерживаются ли таблицы Delta Lake.

Синтаксис

[ MSCK ] REPAIR TABLE table_name
{
    [ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}

Для отмеченных галочкой Databricks SQL и Databricks Runtime 12.2 LTS и выше, MSCK является необязательным.

Параметры

  • table_name

    Имя таблицы. Если таблица не найдена, Azure Databricks вызывает ошибку TABLE_OR_VIEW_NOT_FOUND .

  • ADDили DROPSYNCPARTITIONS

    Применяется к:отмечено галочкой Databricks SQL отмечено галочкой Databricks Runtime 10.4 LTS и выше

    При создании таблицы, отличной от Delta, с помощью предложения PARTITIONED BY секции создаются и регистрируются в хранилище метаданных Hive. Однако если создать секционированную таблицу из существующих данных, секции не регистрируются автоматически в хранилище метаданных Hive. Для регистрации разделов запустите MSCK REPAIR TABLE.

    Другой способ восстановления разделов — использовать ALTER TABLE ВОССТАНОВЛЕНИЕ РАЗДЕЛОВ.

    Если таблица кэшируется, команда очищает кэшированные данные таблицы и все зависимые от нее данные. Кэш заполняется в следующий раз, когда производится доступ к таблице или её зависимостям.

    • Команда ADD добавляет новые разделы в каталог сеансов для всех подпапок базовой папки таблицы, которые не принадлежат ни к каким разделам таблицы. ADD — это аргумент по умолчанию, если другой параметр не указан.
    • Команда DROP удаляет все секции из каталога сеансов, которые имеют не существующие расположения в файловой системе.
    • SYNC — это сочетание DROP и ADD.
  • SYNC METADATA

    Только Delta Lake.

    Если задана конфигурация spark.databricks.delta.catalog.update.enabledtrue, то целевые обновления метаданных таблицы автоматически синхронизируются со службой каталога. В противном случае может понадобиться ручная синхронизация с помощью REPAIR TABLE table_name SYNC METADATA.

    Считывает журнал транзакций целевой таблицы и обновляет сведения о метаданных в службе каталога. Для выполнения этой команды необходимо иметь привилегии MODIFY и SELECT в целевой таблице и USE SCHEMA и USE CATALOG привилегии родительской схемы и каталога.

    Этот аргумент работает с хранилищем метаданных Hive в Databricks Runtime 16.1 и выше. Для таблиц хранилища метаданных Hive необходимо иметь права USAGE и MODIFY.

    Если Delta UniForm включен (требуется Unity Catalog), SYNC METADATA запускает ручное преобразование текущих метаданных Delta в метаданные Iceberg и синхронизирует последнюю версию Iceberg для конечной точки Unity Catalog Iceberg. Смотрите "Чтение таблиц Delta с помощью клиентов Iceberg".

    Вы можете использовать REPAIR TABLE table_name SYNC METADATA для применения модели разрешений каталога Unity к мелким клонам, которые вы читаете из внешнего каталога, созданного с помощью федерации хранилища метаданных Hive. См. статью "Работа с мелкими клонами".

Примеры (таблицы без Delta Lake)

-- create a partitioned table from existing data /tmp/namesAndAges.parquet
> CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
  LOCATION "/tmp/namesAndAges.parquet";

-- SELECT * FROM t1 does not return results
> SELECT * FROM t1;

-- run MSCK REPAIR TABLE to recovers all the partitions
> MSCK REPAIR TABLE t1;

-- SELECT * FROM t1 returns results
> SELECT * FROM t1;
    name age
  ------- ---
  Michael  20
   Justin  19
     Andy  30

Пример (таблица каталога Unity)

-- run MSCK REPAIR TABLE t1 SYNC METADATA to update the metadata info to Unity Catalog service
> MSCK REPAIR TABLE t1 SYNC METADATA