RDS for MySQL-Redshift のゼロ ETL統合とソートキー変更

# はじめに
2024年9月のアップデートで、Amazon RDS for MySQL と Amazon RedshiftのゼロETL統合が一般提供されるようになりました。また、以前まではゼロETL統合によってレプリケートされたテーブルでは設定されたソートキーを変更できませんでしたが、今回のアップデートによりソートキーの変更が可能となりました。その他、RDS MySQLにおいて、以前は対象テーブルの絞り込みができませんでしたが、今回のアップデートでは絞り込みが可能となりました。本記事では、これらの機能の検証結果について紹介させていただきます。

https://aws.amazon.com/jp/about-aws/whats-new/2024/09/amazon-rds-mysql-zero-etl-integration-redshift-generally-available/

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

# ゼロETL統合とは
ゼロETL統合は、DB同士を直接接続し、データをレプリケートするアーキテクチャです。従来のETLプロセスで必要となるデータパイプラインの構築を省略し、円滑にDB間のデータ移動を行うことが出来ます。
現在、RedshiftのゼロETL統合に対応しているDBは、RDS for MySQL、Aurora MySQL、Aurora PostgreSQLの3種類です。

https://aws.amazon.com/jp/what-is/zero-etl/

https://docs.aws.amazon.com/rds/?icmpid=docs_homepage_featuredsvcs

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.html

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.Zero-ETL.html
 
# 検証項目
1. ゼロETL統合の作成
2. ソートキーの変更
3. テーブルのフィルタリング

# メリット
### 1. ゼロETL統合の作成
・リアルタイムのデータアクセスを提供する
・ETLパイプライン構築のコストをカットできる

### 2. ソートキーの変更
・ダウンタイム無しでのソートキー変更が可能となる
・「AUTO」に設定することで、データに基づいて自動的にソートキーを最適化される

### 3. テーブルのフィルタリング
・レプリケートするテーブルを選択することが出来る

# 前提条件
以下の記事の手順に従い、ETL統合作成の事前準備が必要となります。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.setting-up.html

https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.redshift-iam.html

# 検証結果
### 1. ゼロETL統合の作成
1.AWSのホーム画面で「RDS」を選択
※検索欄で「Amazon RDS」を検索でも可
![スクリーンショット 2025-01-10 144628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/b5fbf660-eadb-033f-8fcc-08cc997e1d92.png)

2.「ゼロのETL統合」を選択
![スクリーンショット 2025-01-10 144815.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/a130b347-14c9-d16e-c32c-b94908409ad8.png)

3.「ゼロETL統合を作成する」を押下
![スクリーンショット 2024-12-25 163052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/43c35e57-7f90-d8f2-4602-72b68771e96d.png)

4.「統合識別子」を入力し、「次へ」を押下
![スクリーンショット 2024-12-25 163741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/7191750b-cf40-e8aa-b02a-7d0ee7ea3107.png)

5.「RDSデータベースの参照」を押下
![スクリーンショット 2024-12-25 164246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/010f5a31-7ec0-f20f-0058-acae1e838dc2.png)

6.「ソースデータベース」を選択し、「選択」を押下
![スクリーンショット 2024-12-25 172639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/8bae210a-6b89-93c3-16bf-43631c762cdc.png)

7.「次へ」を押下
![スクリーンショット 2025-01-09 095049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/db88ab01-03c0-5b53-15e3-243b2fbd2b15.png)

※データフィルタリングオプションのカスタマイズが可能
フィルタータイプとフィルター式を入力することで、レプリケートするテーブルをフィルタリングすることが出来る

例.RDSに以下のテーブルが存在すると仮定
|  DB  |  テーブル名  |
| ---- | ---- |
|  kensyoB  |  books_table  |
|  kensyoB  |  books_table_recode_l  |
|  kensyoB  |  books_table_recode_s  |
|  kensyoB  |  books_table_recode_001  |
|  kensyoB2  |  books_table  |

|  設定対象  |  フィルタータイプ・フィルター式　 |  フィルター例  |
| ---- | ---- | ---- |
|  テーブル  |  【含む】<br>*.books_table  |  kensyoB.books_table<br>kensyoB2.books_table |
|  テーブル  |  【含む】<br>*./.*_recode.*/  |  kensyoB.books_table_recode_l<br>kensyoB.books_table_recode_s  |
|  テーブル  |  【含む】<br>*./books_table_.*/<br>【除外】<br>*./.*_recode.*/ |  kensyoB.books_table_recode_001  |
|  DB  | 【含む】<br>kensyoB.*|  kensyoB.books_table<br>kensyoB.books_table_recode_l<br>kensyoB.books_table_recode_s<br>kensyoB.books_table_recode_001   |

8.「Redshiftデータウェアハウスの閲覧」を押下
![スクリーンショット 2025-01-09 102848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/fb9c7f37-617b-7bbb-2a6b-51809c8225cc.png)

9.ターゲットデータウェアハウスを選び「選択」を押下
![スクリーンショット 2025-01-09 103309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/8be1cfc6-12b7-9a31-8a4e-a9b22f481b85.png)

※選択するクラスターのステータスは「ACTIVE」の必要あり

10.「次へ」を押下
![スクリーンショット 2025-01-09 103726.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/a364ec89-8a41-37c6-d6c3-57e4a61cabee.png)

11.「ゼロETL統合を作成する」を押下
![スクリーンショット 2025-01-09 104324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/49670a7d-622d-3469-7894-d4df2007683f.png)

12.RDSにレプリケート用のテーブルが存在することを確認
![スクリーンショット 2025-01-09 104911.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/0e73bb16-bf7c-d949-42a3-49f4a6481db7.png)

13.Amazon Redshiftの画面にて、「クエリエディタv2」を押下
![スクリーンショット 2025-01-09 105109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/cf071184-59d5-63c1-b441-94f5035f8d45.png)

14.以下のSQLを実行し、統合IDを取得
```
SELECT integration_id FROM SVV_INTEGRATION;
```

![スクリーンショット 2025-01-10 145018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/b2bced79-b2ac-63e5-0b2d-d2af4b47e474.png)

15.以下のSQLを実行し、データベースを作成
```
CREATE DATABASE [データベース名] FROM INTEGRATION [統合ID];
```

![スクリーンショット 2025-01-10 145205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/0a1f6568-1a0a-0dbf-557a-564cd1039c82.png)

16.作成したデータベース内に、RDSのテーブルが存在することを確認
![スクリーンショット 2025-01-09 110108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/902ca4b7-2456-5f13-097b-dcc362c5e4a3.png)

※Redshiftのテーブルに対して、INSERTやDELETEなどのテーブル操作を行った場合、エラーが発生する。

### 2. ソートキーの変更
1.検証用テーブルにおいて、ソートキーが設定されていることを確認
![スクリーンショット 2025-01-10 145337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/41ca1a54-574c-445f-21cb-82fda5051449.png)

2.以下のSQLを実行し、ソートキーを変更
```
ALTER TABLE [DB名].[テーブル名] ALTER SORTKEY ([ソートキー名]);
```
![スクリーンショット 2025-01-10 145529.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/15b79aa3-e9ff-da5c-800b-2712b6f8a235.png)

3.ソートキーが変更されたことを確認
![スクリーンショット 2025-01-10 150055.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/db3b6541-2695-a088-933c-24fa0fa0914c.png)

### 3. テーブルのフィルタリング
1.RDSに以下の検証用テーブルが存在することを確認
|  DB  |  テーブル名  |
| ---- | ---- |
|  kensyoB  |  books_table_recode_l  |
|  kensyoB  |  books_table  |
|  kensyoB  |  books_table_A00  |
|  kensyoB  |  books_table_fujita1216_2  |
|  kensyoB  |  books_table_recode_s  |
|  kensyoB2  |  books_table_A00  |
|  kensyoB2  |  books_table_A01  |

![スクリーンショット 2025-01-09 113832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/39a27f9f-93ad-f502-ab9c-85ba8cf023d6.png)

2.ゼロETL統合に以下のフィルター式を設定

|  設定対象  |  フィルタータイプ・フィルター式　 |
| ---- | ---- |
|  テーブル  |  【含む】<br>*./.*_recode.*/  | 

![スクリーンショット 2025-01-10 150237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/36c48abf-2819-d60b-2277-f88cc647878b.png)

3.Redshiftにて、テーブルがフィルタリングされていることを確認
![スクリーンショット 2025-01-10 150426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881573/305ff3fd-9843-9043-d224-562a1db30ef7.png)

# 終わりに
今回検証したゼロETL統合は、RDSに保存したデータをRedshiftで高速に分析したい場合や、RDSのデータとRedshiftのデータを組み合わせて分析した場合などに利用できるサービスだと思います。
初めてゼロETL統合を使用した所感として、かなりシンプルな操作での作成が可能だと思いました。ETLパイプライン作成の時間・金銭のコストがかからないことは魅力的なので、単純なデータ移行の際には使いやすいサービスであると感じました。

# 参考文献
https://aws.amazon.com/jp/what-is/zero-etl/

https://docs.aws.amazon.com/rds/?icmpid=docs_homepage_featuredsvcs

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.html

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.Zero-ETL.html

https://aws.amazon.com/jp/about-aws/whats-new/2024/09/amazon-rds-mysql-zero-etl-integration-redshift-generally-available/

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

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.setting-up.html

https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.redshift-iam.html