QuickSight のデータセットに紐づく Athena のテーブルを再作成したらどうなるのか検証してみた

# はじめに

QuickSight と Athena を連携しているときに、Athena 側のテーブルを再作成したいときがあります。例えば、Athena で CTAS (CREATE TABLE AS SELECT) でデータ加工を行うとき、テーブルを DROP TABLE した後に、再度全体のデータを使って CREATE TABLE したいタイミングがあります。

QuickSight と Athena が連携しているときに、DROP TABLE, CREATE TABLE をしても問題ないのか気になったので検証してみました。QuickSight のデータ定義からやり直しになるのは大変そうなので、設定上にどのような影響があるのか調べてみます。



# 結論

同じテーブル名で再作成すると、QuickSight 側は何も設定変更せずとも、そのまま利用できる。

データ可視化の観点では、DROP TABLE と CREATE TABLE の間はデータが無いので、エラーになる。



# 新しいテーブルを作成

Athena で適当に新しいテーブルを作ります。テーブルを再作成したときにわかりやすくするため、WHERE で「東京支店」のみのデータに限定してみます。再作成するときには、この WHERE 句を外します。

```
CREATE TABLE recreate_table AS 
SELECT * 
FROM outputs
WHERE name = '東京支店';
```

![image-20220723182624516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b4ed6c06-8bc9-f0bc-650a-fd28537f1052.png)



# QuickSight のデータセット作成

Athena で作成したテーブルを使って、新しいデータセットを作成していきます。

![image-20220723181006516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/af3a768f-d21f-beb9-8933-65a8ef20c258.png)



Athena 

![image-20220723181543930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/1fe30b17-e8ac-dd47-4377-695d5ccceda2.png)



Create

```
athena-recreate-test
```

![image-20220723181626775.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8e1943ea-33ea-0d56-f7d9-140065669f27.png)



Edit

![image-20220723182716319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/752122f7-e39b-940e-fae5-4c0e4e79fedd.png)



Save

![image-20220723182735937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ae82d60a-99d7-5f24-6a8c-4c4b1ea784be.png)



こんな感じでデータの可視化ができました

![image-20220723183024857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/d4b46358-6422-7e44-bef5-901eab50563d.png)



ダッシュボード化

![image-20220723183138532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/6adf1737-6672-03b2-ce54-c920ed2adb93.png)



ダッシュボードが作られました

![image-20220723183146678.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5a251a2b-668c-da39-e416-cc531969765c.png)



# テーブル削除

次に、QuickSight が参照しているテーブルを削除します。

```
DROP TABLE recreate_table;
```

![image-20220723183313610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/dc2718d8-a697-d729-1816-efc62f0f36a8.png)



すると、QuickSight 上でDashboard が見えなくなりました。エラーメッセージが表示されます。

![image-20220723183338521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/770a7a08-e679-9a32-eb61-f9203e63363a.png)



Analysis も同様のエラーが出ています。

![image-20220723183354007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b3472bd6-0e10-1033-519b-6820bed1f15a.png)



# 再作成

では、同じ名前でテーブルを再作成してみましょう。今度はWHERE 句を付けていないので、「東京支店」以外のデータも見えるはずです。

```
CREATE TABLE recreate_table AS 
SELECT * 
FROM outputs;
```

![image-20220723183418186.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/7a2c5f58-2450-7182-7bcf-74fda03c8c97.png)



Create Table した直後に、Analysis が普通に反映されました。QuickSight 側は何も設定変更していません。

![image-20220723183448288.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/15be1b1e-7437-ce98-ff83-325c97e32f86.png)



Dashboard ももちろん反映されています。

![image-20220723183503270.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/55de7682-6144-b9b1-9f6f-40ec968d350f.png)



# 検証を通じてわかったこと

- QuickSight で Athena を使って Dashboard や Analysis を作ったあとに、Table を同じ名前で再作成したら、QuickSight 側は何も気にせずそのまま利用可能
  - Direct Query の場合は何もきにしないでOK
  - SPICE の場合は、データのリフレッシュはもちろん必要
- DROP TABLE と CREATE TABLE の間は、ダッシュボードが表示されなくなる。エラーメッセージが表示される。