適用対象: Databricks SQL
Databricks Runtime
このコマンドは、テーブルのパーティションを修復または変更します。
Delta Lake で SYNC METADATA
句を使用して、テーブル メタデータに基づいてカタログ サービスを更新するか、Iceberg 読み取りが有効になっているテーブルの Apache Iceberg メタデータを生成します。 Delta Lake 以外のテーブルのパーティションを変更する場合は、 SYNC METADATA
を使用しないでください。
サポートされる機能は、テーブルが Unity カタログまたは Hive メタストアに登録されているかどうか、およびテーブルが Delta Lake によってサポートされているかどうかによって異なります。
構文
[ MSCK ] REPAIR TABLE table_name
{
[ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}
Databricks SQL
Databricks Runtime 12.2 LTS 以降の場合、
MSCK
はオプションです。
パラメーター
-
テーブルの名前。 テーブルが見つからない場合、Azure Databricks で TABLE_OR_VIEW_NOT_FOUND エラーが発生します。
ADD
、DROP
またはSYNC
PARTITIONS
適用対象:
Databricks SQL
Databricks Runtime 10.4 LTS 以降
PARTITIONED BY
句を使用して非 Delta テーブルを作成するときに、パーティションが生成され、Hive メタストアに登録されます。 ただし、パーティション テーブルが既存のデータから作成された場合、パーティションは Hive メタストアに自動的には登録されません。 パーティションを登録するには、MSCK REPAIR TABLE
を実行します。パーティションを回復するもう 1 つの方法は、ALTER TABLE RECOVER PARTITIONSを使用することです。
テーブルがキャッシュされている場合、コマンドはテーブルのキャッシュされたデータと、それを参照するすべての依存データをクリアします。 キャッシュは、次にテーブルまたは依存にアクセスされたときに入力されます。
- ADD コマンドは、テーブル パーティションに属していないベース テーブル フォルダー内のすべてのサブフォルダーの新しいパーティションをセッション カタログに追加します。 ADD は、他のオプションが指定されていない場合の既定の引数です。
- DROP コマンドを使用すると、ファイル システム内に存在しない場所を持つセッション カタログからすべてのパーティションがドロップされます。
は、 DROP と ADDの組み合わせです。
SYNC METADATA
Delta Lake のみ。
構成
spark.databricks.delta.catalog.update.enabled
がtrue
に設定されている場合、ターゲット テーブルメタデータの更新はカタログ サービスに自動的に同期されます。 それ以外の場合は、REPAIR TABLE table_name SYNC METADATA
を使用した手動同期が必要になる場合があります。ターゲット テーブルのトランザクション ログを読み取り、カタログ サービスのメタデータ情報を更新します。 このコマンドを実行するには、ターゲット テーブルに対する MODIFY 権限と SELECT 権限、および親スキーマとカタログに対する USE SCHEMA および USE CATALOG 権限が必要です。
この引数は、Databricks Runtime 16.1 以降の Hive メタストアで動作します。 Hive メタストア テーブルの場合は、USAGE 権限と MODIFY 権限が必要です。
Delta UniForm が有効になっている場合 (Unity カタログが必要です)、
SYNC METADATA
は現在の Delta メタデータから Iceberg メタデータへの手動変換をトリガーし、Unity カタログ Iceberg エンドポイントの最新の Iceberg バージョンを同期します。 デルタテーブルをIcebergクライアントで読む方法については、を参照してください。REPAIR TABLE table_name SYNC METADATA
を使用することで、Hiveメタストアフェデレーション経由で作成された外部カタログから浅いクローンを読み取る場合に、Unityカタログのアクセス許可モデルを適用できます。 浅いクローンの操作をこちら参照してください。
例 (非 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