【摘要】Amazon Redshift

## はじめに

この記事は、次のリンク先で公開されている AWS Black Belt の内容を中心に Amazon Redshift についてまとめ、Redshift を知らない人でも概要を理解できることを目指して書きました。

YouTube - Amazon Redshift Overview【AWS Black Belt】

https://www.youtube.com/watch?v=xTDHFeUtYCg


なお、記事の内容は2024年11月時点において、上記リンク先動画の内容、Skill Builder の講座の内容などを踏まえて筆者がまとめたものとなります。
記事の内容に誤りが含まれている可能性があることについて、予め断りを入れさせてください。


## データウェアハウスサービス、その役割とは

データウェアハウス（DWH）の主な目的は、トランザクションシステム、運用データベースなどの**さまざまなソースからのデータを一元化されたリポジトリに統合すること**です。これにより、**組織は分析を目的とした、信頼できる唯一の情報源を持つ**ことができます。

しかし、データウェアハウスを活用した大規模データ分析には課題があります。

課題のうちのひとつは、例えば次のようなものです。
従来のデータ分析アーキテクチャでは、データウェアハウスにデータを保存するまでに以下の流れを辿ります。

    データソース → ETL → データウェアハウス

※***ETL***…データの抽出、変換、ロードを意味します。データウェアハウスはリレーショナルデータを扱うことから、適切なスキーマにデータを整形してロードする必要があるためです。


上記から、データソースにある非リレーショナルデータは一度変換処理を挟まないとデータウェアハウスに取り込めず、ETLパイプラインの構築/管理に多大な工数がかかっていました。
これが従来の課題のひとつです。

そこで、AWSは新たなデータ分析アーキテクチャを提唱しています。
それが ***"Modern data architecture"*** です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3467546/4f992fcb-11d3-88e9-a930-3425bd5cc71f.png)
参照元：YouTube - Amazon Redshift Overview【AWS Black Belt】　※開始5分後あたり

https://www.youtube.com/watch?v=xTDHFeUtYCg


ここで Redshift は **Analytics （分析）の役割を果たし、他の柱と相互に関係しあうことで、組織のデータアクセスを簡単にし、データの高度なガバナンスや自由なデータ活用を可能にします**。
（あくまで Redshift について紹介するための前座のため、この記事では Modern data architecture についてこれ以上深掘りしません。）


次の図は、 Redshift が Analytics （分析）の役割を果たすにあたって、具体的にどのようなことを行うことができるのか、を図示したものになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3467546/59846ef4-a2e9-f74b-3252-cf7a3ec56183.png)
参照元：Skill Builder - Fundamentals of Analytics on AWS - Part 2　※「データウェアハウスとは」という章

https://explore.skillbuilder.aws/learn/course/18779/play/146159/fundamentals-of-analytics-on-aws-part-2


これから紹介する Redshift の詳細について理解を深めるには、上の図が参考になると思います。
特に「**すべてのデータを分析する**」という部分に差し掛かったら、適宜この図に戻って読み進めていただけると良いと考えます。



## Amazon Redshift とは

（前置きが少し長くなりました。ここからが本論です。）

Redshift には3つの大きな特徴があります。
1. **誰でも簡単に分析できる**
1. **すべてのデータを分析する**
1. **コストパフォーマンスの高さ**

→多用なユースケースに適用可能なデータウェアハウスの選択肢です。


起動方法は Provisioned と Serverless から選べます。
**Provisioned の場合**
クラスター（ノードのグループ）は、
- リーダノード（クエリを受信しコンパイルする。一部クエリを除き、コンピュートノードにクエリ実行を依頼する。）

と
    
- コンピュートノード（クエリを実行して結果をリーダノードに返却する。複数ノードが並列に稼働する。）
    
で構成され、高速な並列処理（MPP…後述します）を実現しています。
    
    ※クラスター（ノード）のタイプは2種類あります。
    DC2：コンピュートノードにてユーザデータを保存。比較的安価に利用可能。
    RA3：ストレージ機能（Amazon Redshift マネージドS3バケットが使われる）をコンピュートノードから分離したことにより、ストレージ機能とコンピュート機能を個別にスケールすることが可能。

**Serverless の場合**
インフラストラクチャ（クラスター, ノード）の管理が不要です。


### 1. 誰でも簡単に分析できる

「分析」の前段階として、そもそもクラスターを簡単に起動できます。

**Provisioned の場合**
- クラスターのノード数、ノードタイプを設定するだけ（後から変更可能）
- クラスターの詳細設定（ネットワークやバックアップなど）が可能

**Serverless の場合**
- 名前空間（ストレージ）とワークグループ（コンピュート）を設定
- クラスター, ノードの設定は不要


クラスター起動後は ***Amazon Redshift query editor v2*** を使うことで、
- Web ベースのクエリエディタですぐにクエリ実行が可能
- テーブル作成、データのロード、クエリ結果のグラフ化を GUI 操作で簡単に実行可能

なため、データの分析が簡単に実施できます。

さらに、ワークロードのパフォーマンスチューニングを自動化（機械学習が用いられる）してくれます。
これによって、効率的なパフォーマンスのもと、分析ワークロードを実行できます。


### 2. すべてのデータを分析する

先ほど登場した図に記載してある特徴を中心に、Redshift がすべてのデータをどのように分析することができるか、について説明します。

- **Amazon Redshift Spectrum**
データ移動なしでS3（ユーザ管理）のデータへのクエリが可能

- **フェデレーテッドクエリ**
他の Redshift クラスター、RDS/Aurora に対し、データ移動なしでクエリが可能

- **Amazon Redshift Data Sharing**
複数の Redshift クラスター間でデータをセキュアで簡単に共有（Amazon Redshift マネージド S3 バケットを使用）することが可能（クロスアカウント、クロスリージョンに対応）

- **AWS Data Exchange for Amazon Redshift**
AWS Data Exchange でお客様データをサブスクリプション型で購読して、そのデータを ETL なしで（**Amazon Redshift Data Sharing** の機能を利用することで）容易にインテグレーションすることが可能

- **Amazon Redshift ML**
SQL経由で Amazon SageMaker と連携し、機械学習モデルの作成、トレーニング、デプロイを自動で実行することが可能

- **Amazon Redshift Streaming Ingestion**
KDS と MSK からのストリーミング取り込みが可能（マテリアライズドビュー（後述します）を作成することで、S3 でステージングする必要がないためレイテンシが低い）

- **S3 からの自動COPY**
S3 への新規ファイル格納をトリガーに、ジョブによる COPY コマンド実行が可能


### 3. コストパフォーマンスの高さ

- 分析ワークロードに特化した列指向ストレージ

- 複数のコンピュートノードがデータの一部に対して同じクエリコードを並列分散実行すること（**MPP アーキテクチャ**）が可能

- **マテリアライズドビュー**によるクエリ高速化
複数の既存のテーブルのデータを組み合わせた複製データテーブルを用意することで、頻繁に実行されるクエリパターンのデータ取得を高速化することが可能。AutoMV により自動的に生成・管理する機能がある。

- 結果セットのキャッシュ機能（**リザルトキャッシュ**）
繰り返し実行されるクエリ結果をリーダノードのメモリでキャッシュすることで、コンピュートノードの処理なしでクエリ実行が可能

- クエリスループットを最大化するためのワークロード最適化を自動化
**ショートクエリアクセラレーション**（SQA）により、実行時間の短いクエリは専用の高速キューにルーティングされ実行される

- クエリ特性に合わせたチューニングが可能
**Elastic Resize** （伸縮自在なサイズ変更）により、ノード数やノードタイプを変更可能。スケジューリング実行も可能
**同時実行スケーリング**により、ピーク時に1~10個の追加クラスターを自動でスケールアウト。追加クラスターは処理が終わったら自動で停止


## そのほか

### 可用性とセキュリティ
- クラスター再配置（RA3 のみでサポート）
クラスターを別の AZ にフェールオーバーが可能

- Multi-AZ 配置（RA3 のみでサポート）
1つのエンドポイントを持つ単一のデータウェアハウスとしてアクセス可能なクラスターを、2つの AZ に配置してワークロードを自動分散

- Amazon Redshift マネージド VPC エンドポイント（Provisioned の場合、RA3 のみでサポート）
別のVPCから Redshift が配置されたVPCに対する、プライベート接続のためのエンドポイントを設定可能

- データベースにおけるアクセスコントロール
列/行レベルのアクセスコントロール、ロール単位のアクセス制御が可能。マスキングポリシーを使って、特定の条件の場合のみ特定のデータをマスクされた状態で表示することが可能

- 保存時と転送中のデータ暗号化
AWS Key Management Service （AWS KMS）と統合して、キー管理を強化することも可能


### 料金体系

**共通**
RMS （Amazon Redshift マネージド S3 バケット）のストレージ使用量

**Provisioned の場合**
インスタンス起動時間 + Spectrum 利用料 + 同時実行スケーリング利用料

**Serverless の場合**
RPU （クエリ処理）実行時間