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

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

Databricks はSQLUnity Catalog または Hive metastoreに登録されたテーブルを削除および置換するための標準の DDL コマンドをサポートしています。この記事では、Delta テーブルの削除と置換の例と、構成された環境と目的の結果に応じた構文の推奨事項について説明します。

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

DROP TABLE を使用してメタストアからテーブルを削除するのは、テーブルを完全に削除し、同じ場所に新しいテーブルを作成する予定がない場合です。例えば:

SQL
DROP TABLE table_name

DROP TABLE セマンティクスは、テーブルのタイプと、テーブルが Unity Catalog に登録されているか、レガシ テーブルに登録されているかによって異なります Hive metastore。

テーブルの種類

METASTORE

挙動

マネージド

Unity Catalog

テーブルがメタストアから削除され、基になるデータに削除のマークが付けられます。 Unity CatalogマネージドテーブルにデータをUNDROPできます。

マネージド

Hive

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

外部

Unity Catalog

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

外部

Hive

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

DROP TABLE セマンティクスはテーブルの種類によって異なり、Unity Catalog は内部テーブル ID を使用して Delta テーブルの履歴を保持します。 ただし、すべてのテーブルは、操作の完了後に、以前に登録されたテーブル名にメタストアからのデータとテーブル履歴へのアクティブなリンクがなくなるという共通の結果を共有します。

DROP TABLEを参照してください。

注記

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

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

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

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

CREATE OR REPLACE TABLE 使用しているテーブルタイプやメタストアに関係なく、同じセマンティクスを持っています。 CREATE OR REPLACE TABLE の重要な利点は次のとおりです。

  • テーブルの内容は置き換えられますが、テーブルの ID は維持されます。
  • テーブル履歴は保持され、 RESTORE コマンドを使用してテーブルを以前のバージョンに戻すことができます。
  • 操作は 1 つのトランザクションであるため、テーブルが存在しない時間はありません。
  • テーブルからの読み取り並列クエリは、中断することなく続行できます。 置換前と置換後のバージョンがテーブル履歴にまだ存在するため、並列クエリは必要に応じてどちらのバージョンのテーブルも参照できます。

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

データを並列操作に置き換える

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

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

SQL
-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;

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

この推奨事項の理由は、マネージド テーブルと外部テーブルのどちらを使用しているか、Unity Catalog を使用しているかどうかによって異なりますが、このパターンを使用するすべての Delta テーブルの種類で、エラー、レコードの削除、または結果の破損が発生する可能性があります。

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

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

アトミック・データの置換中もテーブル・ヒストリーは保持されるため、並列トランザクションは参照されるソース・テーブルのバージョンを検証でき、予期しない動作や結果を引き起こすことなく、必要に応じて並列トランザクションを失敗または調整できます。