DROP TABLE¶
現在のスキーマまたは指定されたスキーマからテーブルを削除しますが、 UNDROP TABLE を使用して回復できるようにテーブルのバージョンを保持します。詳細については、使用上の注意 をご参照ください。
- こちらもご参照ください。
CREATE TABLE、 ALTER TABLE、 SHOW TABLES、 TRUNCATE TABLE、 DESCRIBE TABLE
構文¶
DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
パラメーター¶
name
ドロップするテーブルの識別子を指定します。識別子にスペース、特殊文字、または大文字と小文字が混在する場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます(例えば、
"My Object"
)。テーブル識別子が完全修飾されていない場合(
db_name.schema_name.table_name
またはschema_name.table_name
の形式)、コマンドは、セッションの現在のスキーマにあるテーブルを探します。CASCADE | RESTRICT
テーブルを参照する外部キーが存在する場合、テーブルをドロップできるかどうかを指定します。
CASCADE: テーブルに他のテーブルの外部キーによって参照されるプライマリキーまたは一意キーがある場合でも、テーブルをドロップします。
RESTRICT: 既存の外部キー参照に関する警告を返し、テーブルをドロップしません。
デフォルト: 標準テーブルの場合は CASCADE、ハイブリッドテーブルの場合は RESTRICT。ハイブリッドテーブルのドロップ もご参照ください。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
OWNERSHIP |
テーブル |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
テーブルをドロップしても、システムから永久に削除されるわけではありません。ドロップされたテーブルのバージョンは、テーブルの データ保持期間 で指定された日数の間、 Time Travel に保持されます。
Time Travelの保持期間内であれば、 UNDROP TABLE コマンドを使用して、ドロップしたテーブルを復元できます。
テーブルをドロップした*後に*アカウントまたは親オブジェクト(データベースまたはスキーマ)のTime Travel保持期間を変更しても、ドロップされたテーブルのTime Travel保持期間は変更されません。詳細については、 Time Travelトピックの注意事項 をご参照ください。
Time Travelの保持期間が終了すると、ドロップされたテーブルの次の状態は、永続的、一時的、または仮のいずれかによって異なります。
永続的なテーブルが Fail-safe に移動します。Fail-safe(7日)では、ドロップされたテーブルは回復できますが、Snowflakeによってのみです。テーブルがFail-safeのままになると、パージされます。
一時テーブルまたは仮テーブルにはFail-safeがないため、Time Travelから外れるとパージされます。
注釈
長時間実行されるTime Travelクエリは、クエリが完了するまで、アカウント内のデータとオブジェクト(テーブル、スキーマ、およびデータベース)をFail-safeに移動するのを遅らせます。仮テーブルと一時テーブルのパージも同様に遅れます。
ドロップされたテーブルがパージされると、復元できません。再作成する必要があります。
テーブルをドロップした後、同じ名前のテーブルを作成すると、新しいバージョンのテーブルが作成されます。以下のステップに従うと、以前のテーブルのドロップされたバージョンを復元するできます。
テーブルの現在のバージョン名を変更します。
UNDROP TABLE コマンドを使用して、テーブルの以前のバージョンを復元します。
テーブルをドロップする前に、テーブルを参照するビューがないことを確認してください。ビューが参照するテーブルをドロップすると、ビューが無効になります(つまり、ビューをクエリすると「オブジェクトが存在しません」というエラーが返されます)。
テーブルをドロップするには、テーブルに対する OWNERSHIP 権限を持つロールを使用する必要があります。
IF EXISTS 句が指定されており、ターゲットオブジェクトが存在しない場合、コマンドはエラーを返さずに正常に完了します。
ハイブリッドテーブルのドロップ¶
RESTRICT または CASCADE オプションを指定せずにハイブリッドテーブルをドロップしたとき、ハイブリッドテーブルに別のテーブルとのプライマリキー/外部キーまたは一意キー/外部キーの関係がある場合、DROP TABLE コマンドはエラーで失敗します。デフォルトの動作は RESTRICT です。
例:
CREATE OR REPLACE HYBRID TABLE ht1(
col1 NUMBER(38,0) NOT NULL,
col2 NUMBER(38,0) NOT NULL,
CONSTRAINT pkey_ht1 PRIMARY KEY (col1, col2));
CREATE OR REPLACE HYBRID TABLE ht2(
cola NUMBER(38,0) NOT NULL,
colb NUMBER(38,0) NOT NULL,
colc NUMBER(38,0) NOT NULL,
CONSTRAINT pkey_ht2 PRIMARY KEY (cola),
CONSTRAINT fkey_ht1 FOREIGN KEY (colb, colc) REFERENCES ht1(col1,col2));
DROP TABLE ht1;
SQL compilation error:
Cannot drop the table because of dependencies
この場合、DROP TABLEコマンドは失敗します。必要に応じて、DROP TABLEコマンドでCASCADEを指定するとデフォルトの動作を無効にできます。
DROP TABLE ht1 CASCADE;
その代わり、この場合にはまず依存しているテーブル ht2
を削除してからテーブル ht1
をドロップします。
例¶
テーブルをドロップします。
SHOW TABLES LIKE 't2%'; +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | Tue, 17 Mar 2015 16:48:16 -0700 | T2 | TESTDB | PUBLIC | TABLE | | | 5 | 4096 | PUBLIC | 1 | +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ DROP TABLE t2; +--------------------------+ | status | |--------------------------| | T2 successfully dropped. | +--------------------------+ SHOW TABLES LIKE 't2%'; +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------| +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
テーブルを再度ドロップしますが、テーブルが存在しない場合でもエラーを発生させないでください。
DROP TABLE IF EXISTS t2; +------------------------------------------------------------+ | status | |------------------------------------------------------------| | Drop statement executed successfully (T2 already dropped). | +------------------------------------------------------------+