[アップデート] Amazon Redshift Zero-ETL統合のテーブルのソートキーの変更を試してみた

[アップデート] Amazon Redshift Zero-ETL統合のテーブルのソートキーの変更を試してみた

Clock Icon2024.10.28

AWS事業本部コンサルティング部の石川です。最近、続々とZero-ETL統合が一般提供開始されていますが、今日ご紹介するアップデートは、Zero-ETLで連携されたテーブルに対して、ダウンタイムなしでソートキーの変更が可能になったことです。これは、連携されたテーブルに対するクエリのパフォーマンスを向上させるアップデートです!

https://aws.amazon.com/jp/about-aws/whats-new/2024/09/amazon-redshift-altering-sort-keys-tables-zero-etl-integration/

テーブルのソートキー変更機能

Amazon Redshiftでは、テーブルのソートキーをダウンタイムなしで変更できるようになりました。この機能により、以下のことが可能になります。

  • Zero-ETL統合のテーブルに新しいソートキーを設定
  • Zero-ETL統合のテーブルにソートキー「AUTO」を設定

これらの操作は、テーブルのデータを移動せずに実行できるため、システムの可用性を維持しながらパフォーマンスを最適化できます。

テーブルのソートキーの変更を試す

検証するための環境

先日のAmazon Aurora PostgreSQL と Amazon Redshift の Zero-ETL 統合の環境を用います。

https://dev.classmethod.jp/articles/amazon-aurora-postgresql-amazon-redshift-zero-etl-ga/

Zero-ETL統合のテーブルのおさらい

まず、Zero-ETL統合のテーブルは、どこで作成されるのかについておさらいします。

上記のAmazon Aurora PostgreSQL と Amazon Redshift の Zero-ETL 統合を設定すると、「統合からデータベースを作成」しなければ、連携されたテーブルを経由してデータにアクセスできません。そのためZero-ETL 統合からRedshiftのデータベースを作成します。データベースを作成するとその中にpublicスキーマがあり更にその下に連携したテーブルが作成され、そのテーブルにデータが連携されます。今回、ソートキーの変更を変更しようと思ってるテーブルは、ここで作成したデータベースの中にあるテーブルになります。

amazon-aurota-postgres-amazon-redshift-zero-etl-16

Redshiftのテーブルの初期状態

上記の場合は、posgres_zeroetlデータベースのpublicスキーマのdevices1テーブルとなります。(尚、posgres_zeroetlデータベースの「posgres」は、データベース作成時の私のタイポなので深い意味はありません。)

devices1テーブルのテーブル定義は、以下の通りです。data_tsカラムに対して、既にソートキーが設定されています。

posgres_zeroetl=# \d
         List of relations
 Schema |   Name   | Type  | Owner 
--------+----------+-------+-------
 public | devices1 | table | root
(1 row)

posgres_zeroetl=# show table devices1;
                                   Show Table DDL statement                                   
----------------------------------------------------------------------------------------------
 CREATE TABLE public.devices1 (                                                              +
     id character varying(19) ENCODE lzo,                                                    +
     data_ts character varying(38) NOT NULL DEFAULT ''::character varying ENCODE raw distkey,+
     padb_internal_txn_seq_col bigint ENCODE runlength,                                      +
     padb_internal_txn_id_col bigint ENCODE runlength,                                       +
     PRIMARY KEY (data_ts)                                                                   +
 )                                                                                           +
 DISTSTYLE KEY                                                                               +
 SORTKEY ( data_ts );
(1 row)

posgres_zeroetl=# select * from devices1;
   id   |            data_ts            
--------+-------------------------------
 CM1001 | 2024-10-27 09:01:43.000531+00
 CM1001 | 2024-10-27 09:02:12.218018+00
 CM1001 | 2024-10-27 09:02:15.021707+00
:
:
:
 CM1001 | 2024-10-27 09:05:59.355755+00
 CM1001 | 2024-10-27 09:05:59.971134+00
(15 rows)

テーブルの概要情報を確認します。

posgres_zeroetl=# select "table", encoded, diststyle, sortkey1, skew_sortkey1, skew_rows from svv_table_info where "schema" = 'public';
  table   | encoded |  diststyle   | sortkey1 | skew_sortkey1 | skew_rows 
----------+---------+--------------+----------+---------------+-----------
 devices1 | Y       | KEY(data_ts) | data_ts  |          1.00 |      1.14
(1 row)

devices1テーブルのソートキー「AUTO」に変更する

data_tsカラムに対して、ソートキー「AUTO」を設定してみます。devices1テーブルのテーブル定義は、以下の通りです。

posgres_zeroetl=# ALTER TABLE devices1 ALTER SORTKEY AUTO;
ALTER TABLE

posgres_zeroetl=# show table devices1;
                                   Show Table DDL statement                                   
----------------------------------------------------------------------------------------------
 CREATE TABLE public.devices1 (                                                              +
     id character varying(19) ENCODE lzo,                                                    +
     data_ts character varying(38) NOT NULL DEFAULT ''::character varying ENCODE raw distkey,+
     padb_internal_txn_seq_col bigint ENCODE runlength,                                      +
     padb_internal_txn_id_col bigint ENCODE runlength,                                       +
     PRIMARY KEY (data_ts)                                                                   +
 )                                                                                           +
 DISTSTYLE KEY                                                                               +
 SORTKEY ( data_ts );
(1 row)

変わってない?そんな事ありません。テーブルの概要情報を確認すると、data_tsからAUTO(SORTKEY(data_ts))に変わったことが確認できます。

posgres_zeroetl=# select "table", encoded, diststyle, sortkey1, skew_sortkey1, skew_rows
from svv_table_info where "schema" = 'public';
  table   | encoded |  diststyle   |        sortkey1        | skew_sortkey1 | skew_rows 
----------+---------+--------------+------------------------+---------------+-----------
 devices1 | Y       | KEY(data_ts) | AUTO(SORTKEY(data_ts)) |          1.00 |      1.14
(1 row)

最後に

Zero-ETL統合で連携されたRedshift上のテーブルには、既にソートキーが設定されていました。恐らく、ソーステーブル(今回の場合、Aurora PostgreSQL)のプライマリキーがソートキーとして設定されたと考えられます。プライマリキー以外のソートキーを指定したい場合や、ソートキーをAUTOに設定したい場合など、今回のアップデートが有用となりそうです。特にテーブルのソートキーをAUTOに設定することで、チューニングをRedshiftクラスタに任せられるようになる点が大きな利点といえるでしょう。

次は、分散スタイルが変更できるようになるといいですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.