Delta テーブルを削除または置換する
Databricks はSQLUnity Catalog または Hive metastoreに登録されたテーブルを削除および置換するための標準の DDL コマンドをサポートしています。この記事では、Delta テーブルの削除と置換の例と、構成された環境と目的の結果に応じた構文の推奨事項について説明します。
テーブルを削除するタイミング
DROP TABLE
を使用してメタストアからテーブルを削除するのは、テーブルを完全に削除し、同じ場所に新しいテーブルを作成する予定がない場合です。例えば:
DROP TABLE table_name
DROP TABLE
セマンティクスは、テーブルのタイプと、テーブルが Unity Catalog に登録されているか、レガシ テーブルに登録されているかによって異なります Hive metastore。
テーブルの種類 | METASTORE | 挙動 |
---|---|---|
マネージド | Unity Catalog | テーブルがメタストアから削除され、基になるデータに削除のマークが付けられます。 Unity Catalogマネージドテーブルにデータを |
マネージド | Hive | テーブルがメタストアから削除され、基になるデータが削除されます。 |
外部 | Unity Catalog | テーブルはメタストアから削除されますが、基になるデータは残ります。 URI アクセス権限は、データを含む外部ロケーションによって管理されるようになりました。 |
外部 | Hive | テーブルはメタストアから削除されますが、基になるデータは残ります。 URI アクセス権限は変更されません。 |
DROP TABLE
セマンティクスはテーブルの種類によって異なり、Unity Catalog は内部テーブル ID を使用して Delta テーブルの履歴を保持します。 ただし、すべてのテーブルは、操作の完了後に、以前に登録されたテーブル名にメタストアからのデータとテーブル履歴へのアクティブなリンクがなくなるという共通の結果を共有します。
DROP TABLEを参照してください。
Databricks では、本番運用 パイプラインまたはシステムで同じ名前を使用してテーブルを削除してから再作成するパターンは、並列操作で予期しない結果をもたらす可能性があるため、お勧めしません。 並列操作によるデータの置換を参照してください。
テーブルを置き換えるタイミング
Databricks では、ターゲット テーブルを新しいデータで完全に上書きするユース ケースでは、 CREATE OR REPLACE TABLE
ステートメントを使用することをお勧めします。 たとえば、Parquet ディレクトリのすべてのデータで Delta テーブルを上書きするには、次のコマンドを実行します。
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
.
次のアンチパターンは使用しないでください。
-- 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
を使用することをお勧めします。
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
アトミック・データの置換中もテーブル・ヒストリーは保持されるため、並列トランザクションは参照されるソース・テーブルのバージョンを検証でき、予期しない動作や結果を引き起こすことなく、必要に応じて並列トランザクションを失敗または調整できます。