メインコンテンツまでスキップ

テーブルを削除または置換する

Databricksは、Unity CatalogまたはHive metastoreに登録されているテーブルを削除または置換するためのSQL標準DDLコマンドをサポートしています。ドロップおよび置換動作は、テーブルのタイプとメタストアによって異なります。データ損失や並列操作の失敗を避けるために、適切なコマンドを選択してください。

テーブルを削除するタイミング

Databricks は、テーブルを完全に削除し、同じ場所に新しいテーブルを作成する意図がない場合は、メタストアからテーブルを削除するために DROP TABLE を使用することを推奨します。例えば:

SQL
DROP TABLE table_name

DROP TABLE テーブルの種類と、テーブルが Unity Catalog または従来の Hive metastore に登録されているかどうかに応じて、動作が異なります。

テーブルタイプ

メタストア

挙動

マネージド

Unity Catalog

テーブルはメタストアから削除され、基になるデータは削除対象としてマークされます。マネージドテーブルを構成されたリカバリ期間内(デフォルトは7日間)にUNDROPできます。マネージドテーブルのドロップを参照してください。

マネージド

Hive

テーブルはメタストアから削除され、その基になるデータは削除されます。

外部

Unity Catalog

テーブルはメタストアから削除されますが、基になるデータは残ります。URI アクセス特権は、データを含む外部ロケーションによって管理されるようになりました。

外部

Hive

テーブルはメタストアから削除されますが、基になるデータは残ります。URIアクセス権限に変更はありません。

Unity Catalogは、内部テーブルIDを使用してテーブルの履歴を維持します。すべてのテーブルタイプについて、ドロップ操作が完了すると、以前に登録されたテーブル名はメタストアからのデータおよびテーブル履歴へのアクティブなリンクを失います。

See DROP TABLE.

注記

Databricksは、本番運用パイプラインまたはシステムで同じ名前を使用してテーブルを削除してから再作成することを推奨しません。これは、並列操作で予期せぬ結果を招く可能性があるためです。並列処理によるデータの置換を参照してください。

テーブルを置換するタイミング

Databricks は、ターゲットテーブルを新しいデータで完全に上書きしたいユースケースで、CREATE OR REPLACE TABLEステートメントの使用を推奨しています。たとえば、Parquet ディレクトリのすべてのデータでテーブルを上書きするには、次のコマンドを実行します。

SQL
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

CREATE OR REPLACE TABLE 使用するテーブルの種類またはメタストアに関係なく、同じセマンティクスを持ちます。CREATE OR REPLACE TABLEの重要なメリットは以下のとおりです:

  • テーブルのコンテンツは置換されますが、テーブルのIDは維持されます。
  • テーブルの履歴は保持され、RESTOREコマンドを使用してテーブルを以前のバージョンに戻すことができます。
  • この操作は単一のトランザクションであるため、テーブルが存在しない状態になることはありません。
  • テーブルを読み取る並列クエリーは、中断することなく継続できます。置換前後のバージョンがテーブル履歴にまだ存在するため、並列クエリは必要に応じてどちらのバージョンのテーブルも参照できます。
  • 元のテーブルに列マスクが含まれていた場合、それらのマスクは新しいテーブルに引き続き存在する列に対して保持されます。これにより、データアクセス**ポリシー**が保持されることが保証されます。

CREATE TABLE [USING]を参照してください。

並列処理によるデータの置換

並列操作で使用される可能性のあるテーブルのデータを完全に置き換える場合は、CREATE OR REPLACE TABLEを使用する必要があります。

次のアンチパターンは使用しないでください:

SQL
DROP TABLE IF EXISTS table_name;

CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;

すべてのテーブルタイプについて、Unity Catalogを使用しているかどうかにかかわらず、このパターンを使用すると、エラー、レコードのドロップ、または結果の破損が発生する可能性があります。

Databricks では、代わりに、次の例に示すように、常に CREATE OR REPLACE TABLE を使用することをお勧めします。

SQL
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

アトミックな置換はテーブルの履歴を保持するため、並列トランザクションは参照するソーステーブルのバージョンを検証し、予期せぬ動作を伴わずに失敗するか、並列トランザクションを調整できます。