LoginSignup
1
0

Redshiftのデータ共有で元DBに作成したテーブルを即時反映させる

Posted at

はじめに

Redshiftのデータ共有、皆さん使われているでしょうか。
物理的なコピーをせず、Redshift間でデータの共有ができて便利ですよね。

さて、このデータ共有ですが、既に共有されているテーブルに対してデータの追加や更新(INSERTやUPDATE)をすると即時反映されますが、テーブルの作成(CREATE TABLE)はデフォルトでは即時反映されません

テーブルの作成も即時反映させたい場合は、ALTER文で SET INCLUDENEW = TRUE SCHEMA schema を実施する必要があります。デフォルトではこれがFALSEになっており、かつGUI上ではこれをTRUEに設定できるところが見つかりませんでした。

今回はこれをクエリエディタv2で実施してみます。

前提条件

以下のRedshiftを、それぞれ別のアカウントで作成済み。

  • プロデューサーはRedshift Provisioned (RA3)
    • データベース名 dev
    • データ共有名 demosharing
  • コンシューマーはRedshift Serverless
    • 上記のデータ共有から作成したデータベース名 sharing_dev

やってみる

プロデューサー側

テーブルの確認

クエリエディタv2で、devデータベースに存在するテーブルを確認します。
現在は、demo_tbltable_3の2つが存在しています。

image.png

ALTER文実行

devデータベース上で以下のALTER文を実行します。

ALTER DATASHARE demosharing SET INCLUDENEW = TRUE FOR SCHEMA public;

image.png

テーブルの新規作成

同じくdevデータベース上でCREATE文を実行してテーブルを作成します。

image.png

再度テーブルの確認

プロデューサー側はもちろんテーブルが新規作成されていて、テーブルが3つになっています。

image.png

コンシューマー側

テーブルの確認

コンシューマー側では、既にデータ共有からデータベースは作成しています。
そのデータベースsharing_devを見てみると、以下のように3つのテーブルが出来ています。プロデューサー側でCREATE TABLEしただけで、コンシューマー側にも即時反映されていることが分かります。

image.png

注意点

プロデューサー側で実行したALTER文ですが、以下のように最後のFOR SCHEMA publicを抜いて実行するとエラーになります。スキーマを指定しないとうまくいかないようです。

image.png

おわりに

今回は、データ共有のデータ元のデータベースにテーブルを新規作成した際に即時反映されるように設定してみました。データ共有を作成したタイミングでこのオプションが設定できれば良いのですが、CREATE DATASHAREを見てもそのようなオプションはありませんでした。

そのため、今回のように一度データ共有を作成してから、ALTER文で設定するしかなさそうです。
即時反映されるようになると便利になる反面、それを知らずに新規テーブルを作成してしまい、共有したくないものが勝手に共有されてしまったという事故につながる可能性もあります。この設定を行う際は注意してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0