[Update] Amazon Redshift プロデューサークラスタ(共有元のクラスタ)が一時停止している時でもデータ共有できるようになりました
データアナリティクス事業本部コンサルティングチームの石川です。RA3インスタンスでクラスタ間でデータのコピーや移動することなくデータを共有するサービスData Sharingですが、プロデューサークラスタ(共有元のクラスタ)が一時停止している時でもデータ共有できるようになりましたので、早速試してみます。
Redshift Producer クラスターを止めた状態で Data Sharing できるようになりました。夜間バッチ処理が終了次第 Producer を止め、日中帯は Consumer だけを上げておくといったことが可能に。
Amazon Redshift now supports data sharing when producer clusters are paused https://t.co/nyUI2Ohhhp— J.Ozono (@jostandard) April 12, 2021
このアップデートのメリット
以下のユースケースにおいてメリットが考えられます。
- プロデューサークラスタの可用性(メンテナンスウインド)の影響を受けない
- 夜間バッチ処理が終了次第、プロデューサークラスタを止め、日中帯は Consumer だけを上げておくといったことが可能
- 将来的にData Sharingされた共有データをプロデューサークラスタを起動することなくEMRやAthenaから利用できるようになる
一時停止しているプロデューサークラスタのデータ共有を試す
以下のブログで構築した環境を用いて試してみます。
データ共有の一覧の確認(だが、データ共有がない?)
以前に構築したコンシューマークラスタで環境データ共有の一覧の確認したところ、svv_datasharesが見当たりませんでした。つまり、このアップデートが適用される前のデータ共有は、もう一度データ共有の設定が必要になります。
dev=# SELECT * FROM svv_datashares; share_name | share_id | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+----------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------- (0 rows)
データ共有の一覧の確認
前回のブログの内容に従い、プロデューサークラスタとコンシューマークラスタの共有を再設定しました。では、改めてデータ共有の一覧を確認します。コンシューマークラスタなのでプロデューサークラスタが共有してくれたデータ共有が表示されます。
dev=# SELECT * FROM svv_datashares; -[ RECORD 1 ]-------+----------------------------------------------------------------- share_name | tickit_datashare share_id | share_owner | source_database | consumer_database | consumer_tickit share_type | INBOUND createdate | is_publicaccessible | t share_acl | producer_account | 123456789012 producer_namespace | 37ba07bc-d5bf-4916-97b7-28ba57778408
プロデューサークラスタとコンシューマークラスタでは、もちろんデータが共有されているところまで確認できました。
dev=# select consumer_tickit.tickit.sales.sellerid, consumer_tickit.tickit.users.username, (consumer_tickit.tickit.users.firstname ||' '|| consumer_tickit.tickit.users.lastname) as name, consumer_tickit.tickit.users.city, sum(consumer_tickit.tickit.sales.qtysold) from consumer_tickit.tickit.sales, consumer_tickit.tickit.date, consumer_tickit.tickit.users where consumer_tickit.tickit.sales.sellerid = consumer_tickit.tickit.users.userid and consumer_tickit.tickit.sales.dateid = consumer_tickit.tickit.date.dateid and consumer_tickit.tickit.date.year = 2008 and consumer_tickit.tickit.users.city = 'San Diego' group by 1,2,3,4 order by 5 desc limit 5; sellerid | username | name | city | sum ----------+----------+-------------------+-----------+----- 49977 | JJK84WTE | Julie Hanson | San Diego | 22 19750 | AAS23BDR | Charity Zimmerman | San Diego | 21 29069 | SVL81MEQ | Axel Grant | San Diego | 17 43632 | VAG08HKW | Griffin Dodson | San Diego | 16 18888 | KMQ52NVN | Joan Wright | San Diego | 14 (5 rows)
プロデューサークラスタを一時停止(Pause)して確認
プロデューサークラスタを一時停止(Pause)して、statusがPausedであることを確認しました。下記の通り、クエリできました!
dev=# select consumer_tickit.tickit.sales.sellerid, consumer_tickit.tickit.users.username, (consumer_tickit.tickit.users.firstname ||' '|| consumer_tickit.tickit.users.lastname) as name, consumer_tickit.tickit.users.city, sum(consumer_tickit.tickit.sales.qtysold) from consumer_tickit.tickit.sales, consumer_tickit.tickit.date, consumer_tickit.tickit.users where consumer_tickit.tickit.sales.sellerid = consumer_tickit.tickit.users.userid and consumer_tickit.tickit.sales.dateid = consumer_tickit.tickit.date.dateid and consumer_tickit.tickit.date.year = 2008 and consumer_tickit.tickit.users.city = 'San Diego' group by 1,2,3,4 order by 5 desc limit 5; sellerid | username | name | city | sum ----------+----------+-------------------+-----------+----- 49977 | JJK84WTE | Julie Hanson | San Diego | 22 19750 | AAS23BDR | Charity Zimmerman | San Diego | 21 29069 | SVL81MEQ | Axel Grant | San Diego | 17 43632 | VAG08HKW | Griffin Dodson | San Diego | 16 18888 | KMQ52NVN | Joan Wright | San Diego | 14 (5 rows)
さらに、コンシューマークラスタを一時停止(Pause)・再開(Resume)しましたが、上記のとおりクエリが実行できました。つまり、コンシューマークラスタを一時停止(Pause)・再開(Resume)によってData Sharingの設定が消えたり無効になったりしないということです。この場合の初回の実行は20秒以上待たされたので、一瞬焦りました。
まとめ
Amazon Redshiftは、データカタログをリーダノードで管理しているはずなので停止したクラスタのメタデータはどこから取得しているのか謎です。恐らくxxxがyyyになったのでしょう。(xxxとyyyは私の妄想なので発言は控えます。)
Amzon Redshift Data Sharingは、re:Invet 2020での発表から約3ヶ月後にGA、その1ヶ月後にはプロデューサークラスタ(共有元のクラスタ)が一時停止している時でもデータ共有できるようになりました。将来的には、Data Sharingが、EMRやAthenaからクエリできるようになるということは、1つのフルマネージドのフォーマットと捉えたほうが良いのかもしれません。今後も目が離せないアップデートが続きそうなのでまた良いお知らせができることを楽しみにしています。