はじめに
Quicksightでユーザに公開中のデータセットの参照元テーブルに列を追加することがありました。その時の手順についてまとめたいと思います。
列追加する時の考慮事項
更新対象のテーブルはユーザーが参照しているテーブルのため、ダウンタイムなしで項目追加後のテーブルに切り替えたい。
追加する項目はテーブルの最後の項目ではなく、途中に追加したい。
イメージ図
初期状態
前提として、以下図のような構成を初期状態として想定しています。
実テーブルを参照するViewがあり、そのViewをQuick Sightが参照しています。
最終的な状態
最終的には実テーブル、Viewそれぞれに列を追加し、追加した列をQuicksightが参照できるようにしたい。(黄色が追加された列をイメージしていると思ってください)
列追加の手順
1. 実テーブルを複製し、Viewの参照先を切り替える
実テーブルを複製します。以下のようにctasを使うと楽。
create table table_bkup
as select * from table;
その後、viewの参照先を切り替え。
create or replace view table_view
as select
column_1,
(中略)
column_N
from table_bkup
with no schema binding;
2. 旧テーブルを削除し、列追加した新テーブルの作成
DROP TABLE table;
CREATE TABLE table
(列追加を行ったテーブル定義)
;
3. 新テーブルにデータを投入する
insert into table
select
(既存項目はそのままselect
新規項目はnullや他テーブルと結合して値を入れるなどする)
from table_bkup
;
4. Viewを新テーブル参照に切り替え
create or replace view table_view
as select
column_1,
new_column_1,
new_column_2,
(中略)
column_N
from table
with no schema binding;
5. 複製したテーブルの削除
DROP TABLE table_bkup;
さいごに
今回の記事では、Quicksightでユーザに公開中のデータセットの参照元テーブルに列を追加した時の手順について紹介しました。
テーブルを複製してviewの参照先の切り替えることで、テーブルの更新中もユーザからはいつもと変わりなくデータを参照できます。
今回紹介した方法以外にも、ALTER TABLE ADD COLUMNを利用して列追加する方法もあるかと思います。
こちらの方が手順が少ないですが、テーブル更新中にユーザー影響がないかが検証できてないのとテーブルの最後に列追加されるのが嫌だったので、今回の方法を利用しました。
ALTER TABLE ADD COLUMNを使った更新を実施することがあれば、ブログで紹介したいと思います。
Comments