次の方法で共有


REPAIR TABLE

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

このコマンドを使用すると、Delta テーブルのメタデータを Unity Catalog サービスに更新できます。 非 Delta テーブルの場合は、テーブルのパーティションが修復され、Hive メタストアが更新されます。

  • Delta テーブル: SYNC METADATA 引数を使用して Delta テーブルを使用して実行する場合、このコマンドはターゲット テーブルのデルタ ログを読み取り、メタデータ情報を Unity Catalog サービスに更新します。
  • 非 Delta テーブル: 非 Delta テーブルで実行している場合、このコマンドは、非 Delta テーブルのディレクトリ内のパーティションをすべて回復し、Hive メタストアを更新します。

構文

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

check marked yes Databricks SQL Databricks Runtime 12.2 LTS 以降の場合、MSCK はオプションです。

パラメーター

  • table_name

    テーブルの名前。 テーブルが見つからない場合、Azure Databricks で TABLE_OR_VIEW_NOT_FOUND エラーが発生します。

  • ADDDROP または SYNCPARTITIONS

    適用対象: check marked yes Databricks SQL Databricks Runtime 10.4 LTS 以降

    PARTITIONED BY 句を使用して非 Delta テーブルを作成するときに、パーティションが生成され、Hive メタストアに登録されます。 ただし、パーティション テーブルが既存のデータから作成された場合、パーティションは Hive メタストアに自動的には登録されません。 パーティションを登録するには、MSCK REPAIR TABLE を実行します。

    パーティションを回復するもう 1 つの方法は、ALTER TABLE RECOVER PARTITIONS を使用することです。

    テーブルがキャッシュされている場合、このコマンドはテーブルのキャッシュされたデータとそれを参照するすべての依存をクリアします。 キャッシュは、次にテーブルまたは依存にアクセスされたときに入力されます。

    • ADD コマンドを使用すると、テーブル パーティションに属さないベース テーブル フォルダー内のすべてのサブフォルダーのセッション カタログに新しいパーティションが追加されます。 ADD は、他のオプションが指定されていない場合の既定の引数です。
    • DROP コマンドを使用すると、ファイル システム内に存在しない場所を持つセッション カタログからすべてのパーティションがドロップされます。
    • SYNC は、DROPADD を組み合わせたものです。
  • ** SYNC METADATA**

    ターゲット テーブルの差分ログを読み取り、Unity Catalog サービスのメタデータ情報を更新します。 このコマンドを実行するには、ターゲット テーブルに対する MODIFY および SELECT 権限と親スキーマとカタログの USAGE が必要です。 ターゲット テーブルが Unity Catalog に格納されていない場合、この引数を指定したこのコマンドは失敗します。

    Delta UniForm が有効な場合、現在の Delta メタデータから Iceberg メタデータへの手動変換が SYNC METADATA でトリガーされ、Unity Catalog Iceberg エンドポイントの最新 Iceberg バージョンが同期されます。 「UniForm を使用して Iceberg クライアントを使って Delta テーブルを読み取る」を参照してください。

例 (非 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 Catalog テーブル)

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