[Update] Amazon Redshift プロデューサークラスタ(共有元のクラスタ)が一時停止している時でもデータ共有できるようになりました

2021.04.29

データアナリティクス事業本部コンサルティングチームの石川です。RA3インスタンスでクラスタ間でデータのコピーや移動することなくデータを共有するサービスData Sharingですが、プロデューサークラスタ(共有元のクラスタ)が一時停止している時でもデータ共有できるようになりましたので、早速試してみます。

このアップデートのメリット

以下のユースケースにおいてメリットが考えられます。

  • プロデューサークラスタの可用性(メンテナンスウインド)の影響を受けない
  • 夜間バッチ処理が終了次第、プロデューサークラスタを止め、日中帯は 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つのフルマネージドのフォーマットと捉えたほうが良いのかもしれません。今後も目が離せないアップデートが続きそうなのでまた良いお知らせができることを楽しみにしています。