Databricks Unity Catalog のテーブルに対する UNDROP TABLE の利用方法

<!-- 下記の IT プロフェッショナル向け記事の文章にて対して、改善点を指摘して

````markdown
# Databricks Unity Catalog のテーブルに対する UNDROP TABLE の利用方法 -->

## 概要

Databricks Unity Catalog のテーブルを誤って削除してしまった際に、復元する方法である UNDROP TABLE の基本的な利用方法を共有します。

以前はあまり必要性を感じていなかった機能ですが、最近のテスト中にその価値を実感しました。特定のテストケースでエラーが発生し、その時点では関連性がないと思われたテーブルを誤って削除してしまいました。しかし、その後エラーの原因を調査する過程で、削除したテーブルが実は必要だったことが明らかになりました。そこで、UNDROP TABLE を使用してテーブルを復元し、問題を解決することができました。この経験を通じて、UNDROP TABLE の便利さを実感し、その知識を共有するためにこの記事を書くことに決めました。

UNDROP TABLE する方法としては次の2つ方法があることがドキュメントに記載されています。テーブル ID で復元する際には、SHOW TABLES DROPPED にてテーブル ID を取得する必要があるようです。テーブル作成からはじめて、2 つの方法で復元する方法を後述します。

1. テーブル名を指定する方法
2. テーブル ID を指定する方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/cae087d9-8f06-3fa7-f5f1-c6225b6f0107.png)

引用元：UNDROP TABLE - Azure Databricks - Databricks SQL | Microsoft Learn

## 基本的な利用方法

### 事前準備

このセクションでは、検証用のカタログとスキーマを作成します。

```python
%sql
-- 検証用カタログとスキーマを作成
CREATE CATALOG IF NOT EXISTS undrop_wf;
CREATE SCHEMA IF NOT EXISTS undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8fa51afb-9859-4e93-b589-3274bd53a7f5.png)


次に、検証用のテーブルを作成します。

```python
%sql
-- 検証用テーブルを作成
CREATE TABLE IF NOT EXISTS undrop_wf.schema.test_table (
  id INT,
  value STRING
);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1a3ad76a-2ea6-f290-5305-c16f60cfb8a0.png)


作成したテーブルが存在することを確認します。

```python
%sql
-- テーブルがあることを確認
SHOW TABLES FROM undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/75bb27d3-7b12-6cef-2bcb-7bf8944f52c5.png)

テーブルを削除します。

```python
%sql
-- テーブルを削除
DROP TABLE undrop_wf.schema.test_table;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/57a78404-4082-187a-b87b-442e5c17c8de.png)

テーブルが削除されたことを確認します。

```python
%sql
-- テーブルがなくなったことを確認
SHOW TABLES FROM undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b63d93e0-a58b-818f-ea98-096b36dfcc48.png)

削除されたテーブルの一覧を確認します。

```python
%sql
-- 削除されたテーブルの一覧を確認
SHOW TABLES DROPPED IN undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ae66c115-5736-6a89-dc92-172dd759e866.png)


### テーブル名により UNDROP TABLE する方法

テーブル名を指定してテーブルを復元します。

```python
%sql
UNDROP TABLE undrop_wf.schema.test_table
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/86a63d89-bbd3-d106-46b3-8a34ea11d183.png)


テーブルが復元されたことを確認します。

```python
%sql
-- テーブルが復元されたことを確認
SHOW TABLES FROM undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/52d1e0d2-e2c3-ecc4-2f7c-076ca3a35861.png)


### テーブル ID により UNDROP TABLE する方法

既存のテーブルを削除し、同名のテーブルを作成と削除を実施します。

```python
%sql
-- 既存のテーブルを削除
DROP TABLE undrop_wf.schema.test_table;

-- 同名のテーブルを作成
CREATE TABLE IF NOT EXISTS undrop_wf.schema.test_table (
  id INT,
  value STRING
);

-- 同名のテーブルを削除
DROP TABLE undrop_wf.schema.test_table;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7572988b-11b2-7f1d-6403-d3e9f4e01fe1.png)

削除済みテーブルの一覧を表示します。

```python
%sql
-- 削除済みテーブルの一覧に表示
SHOW TABLES DROPPED IN undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6b47c1b2-ab70-db6b-fe9f-bbc4625e0cb0.png)

テーブル ID をセットし、テーブルを復元します。

```python
# テーブル ID をセット
table_id = "042e3829-240d-4481-9796-2d7a27119eeb"

# テーブルの復元
spark.sql(f"UNDROP TABLE WITH ID '{table_id}'")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/efa8ec1c-70f3-ca47-76de-9d177ded5810.png)

テーブルが復元されたことを確認します。

```python
%sql
-- テーブルが復元されたことを確認
SHOW TABLES FROM undrop_wf.schema;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6cb1081a-90c3-63a4-ba91-bda4217e3a64.png)

### 事後処理

検証用のカタログを削除します。

```python
%sql
-- 検証用カタログを削除
DROP CATALOG undrop_wf CASCADE;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a1c3d190-5234-15bf-2ef4-b6682d4ee582.png)

## まとめ

この記事では、Databricks Unity Catalog のテーブルを誤って削除した際の復元方法である UNDROP TABLE の基本的な利用方法を紹介しました。テーブル名を指定する方法とテーブル ID を指定する方法の2つの方法を詳しく説明し、具体的なコード例を通じてその使用方法を示しました。これらの方法は、誤って削除したテーブルが実は必要だった場合に非常に有用です。この記事が、Databricks Unity Catalog のテーブルの管理に役立つことを願っています。

<!-- ```` -->