DROP TABLE

現在のスキーマまたは指定されたスキーマからテーブルを削除しますが、 UNDROP TABLE を使用して回復できるようにテーブルのバージョンを保持します。詳細については、使用上の注意 をご参照ください。

こちらもご参照ください。

CREATE TABLEALTER TABLESHOW TABLESTRUNCATE TABLEDESCRIBE TABLE

構文

DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
Copy

パラメーター

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に移動するのを遅らせます。仮テーブルと一時テーブルのパージも同様に遅れます。

      • ドロップされたテーブルがパージされると、復元できません。再作成する必要があります。

  • テーブルをドロップした後、同じ名前のテーブルを作成すると、新しいバージョンのテーブルが作成されます。以下のステップに従うと、以前のテーブルのドロップされたバージョンを復元するできます。

    1. テーブルの現在のバージョン名を変更します。

    2. 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;
Copy
SQL compilation error:
Cannot drop the table because of dependencies

この場合、DROP TABLEコマンドは失敗します。必要に応じて、DROP TABLEコマンドでCASCADEを指定するとデフォルトの動作を無効にできます。

DROP TABLE ht1 CASCADE;
Copy

その代わり、この場合にはまず依存しているテーブル 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 |
|------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------|
+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
Copy

テーブルを再度ドロップしますが、テーブルが存在しない場合でもエラーを発生させないでください。

DROP TABLE IF EXISTS t2;

+------------------------------------------------------------+
| status                                                     |
|------------------------------------------------------------|
| Drop statement executed successfully (T2 already dropped). |
+------------------------------------------------------------+
Copy