DEA / ドメイン2 データストア管理
重要な内容
Redshift Spectrum・フェデレーテッドクエリ・マテリアライズドビュー
すべてのデータを にロードする必要はありません。 は のデータを、は や のデータを、それぞれ置いたまま Redshift の で問い合わせます。は、重い集計の結果を保存して繰り返しの問い合わせを速くします。DEA-C01 では、データを移行するか、置いたまま遠隔から読むか (スキル 2.1.5) を判断し、これらの機能を選び分ける力が問われます。
Point
- Spectrum は「範囲、領域」という意味です。Redshift の範囲を S3 のデータレイクまで広げる機能、と覚えます。
- Federated (フェデレーテッド) は「連合した」という意味です。別のデータベースを、連合した一員のように問い合わせます。
- Materialized view (マテリアライズドビュー): 結果を実体 (material) として保存したビューです。通常のビューは問い合わせのたびに元の SQL を実行します。
- 和訳
- Federated: 連合の
- Weblio英和辞書「federated」
概要
| 方法 | データの場所 | 向くケース |
|---|---|---|
| ロード () | の中にコピー | 頻繁に読む、最高の性能が必要 |
| に置いたまま | 大量で読む頻度の低い履歴、と DWH の結合 | |
| / に置いたまま | 運用 DB の最新の値を、 を作らずに参照・結合 | |
| 結果を Redshift に保存 | 同じ重い集計を何度も実行するダッシュボード |
試験では、「データを動かさずに」「ETL を作らずに」「最新の値を」「繰り返しの集計を速く」といった言葉から機能を選びます。
主要技術
①Redshift Spectrum ⚠️ 頻出
は、 Data Catalog に登録した のテーブルを外部テーブルとして問い合わせます。S3 のスキャンは、クラスターとは別の Spectrum の処理層が並列に行い、結果を のテーブルと結合できます。
CREATE EXTERNAL SCHEMA lake
FROM DATA CATALOG
DATABASE 'sales_lake'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftSpectrumRole';
SELECT c.region, SUM(h.amount)
FROM lake.sales_history h -- S3 の外部テーブル
JOIN public.customers c -- Redshift のテーブル
ON h.customer_id = c.customer_id
WHERE h.sale_year = 2024 -- パーティション列で絞り込む
GROUP BY c.region;
| 観点 | 内容 |
|---|---|
| カタログ | Glue Data Catalog (または ) の外部スキーマを使う |
| 費用 | プロビジョンドでは S3 からスキャンしたバイト数で課金。Serverless では の使用量に含まれる |
| 速くする工夫 | / 、圧縮、パーティションでの絞り込み、ファイルを大きめにそろえる |
| 権限 | に登録したテーブルは、Lake Formation の権限が適用される (「AWS Lake Formation」の章) |
| 書き込み | 外部テーブルへの INSERT もできるが、主な用途は読み取り。S3 へ書き出すなら |
Spectrum と はどちらも S3 を で読みます。Redshift のテーブルと結合したい、Redshift の利用者と同じ接続で使いたいなら Spectrum、Redshift を持たずに S3 だけを調べたいなら Athena を選びます。
②フェデレーテッドクエリ ⚠️ 頻出
は、 と の PostgreSQL・MySQL のデータを、 から直接問い合わせます。運用 DB の最新の値を、 のジョブを作らずに Redshift のデータと結合できます。
CREATE EXTERNAL SCHEMA ops
FROM POSTGRES
DATABASE 'orders' SCHEMA 'public'
URI 'orders-db.cluster-xxxx.ap-northeast-1.rds.amazonaws.com' PORT 5432
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftFederatedRole'
SECRET_ARN 'arn:aws:secretsmanager:ap-northeast-1:111122223333:secret:orders-db';
| 観点 | 内容 |
|---|---|
| 対応するソース | RDS / Aurora の PostgreSQL と MySQL |
| 認証情報 | のシークレットに保管し、 ロールで読む (「Secrets Manager と Parameter Store」の章) |
| ネットワーク | Redshift から DB へ届く経路 (同じ 、ピアリングなど) との許可が必要 |
| 性能 | 絞り込みの条件を DB 側へ渡し (プッシュダウン)、必要な行だけを持ってくる |
| 影響 | 大量の行を読むクエリは、運用 DB に負荷をかける |
大量の履歴を毎回フェデレーテッドクエリで読むと、運用 DB を圧迫します。頻繁に大量に読むなら、 統合や で Redshift へ複製し、たまに最新値を参照するならフェデレーテッドクエリ、と使い分けます。
③マテリアライズドビュー ⚠️ 頻出
は、SELECT の結果を保存しておき、問い合わせのたびに元のテーブルを集計し直す手間を省きます。
CREATE MATERIALIZED VIEW daily_sales_mv
AUTO REFRESH YES
AS
SELECT sale_date, store_id, SUM(amount) AS total
FROM sales
GROUP BY sale_date, store_id;
| 機能 | 内容 |
|---|---|
| 更新 (REFRESH) | 元のテーブルの変更を反映する。手動、または AUTO REFRESH YES で自動 |
| 増分更新 | 条件を満たすビューは、変更のあった分だけを計算して速く更新する。満たさないビューは全部作り直す |
| 自動クエリ書き換え | 元のテーブルへのクエリを、使えるマテリアライズドビューを読むよう が自動で書き換える |
| 自動マテリアライズドビュー (AutoMV) | よく実行されるクエリのパターンを見て、Redshift が自動で作り、管理する |
| 外部データ | の外部テーブルやのテーブルを元にしても作れる |
| ストリーミング取り込み | / のデータを取り込む先にもなる (「Redshift へのロードとアンロード」の章) |
外部のデータ ( や ) を元にしたマテリアライズドビューを作ると、遠隔のデータを一度だけ読んで Redshift に結果を持てます。データを丸ごと移行せずに、繰り返しの問い合わせを速くできます。
Point
- 通常のビュー = 毎回元の SQL を実行 (常に最新、遅い)
- マテリアライズドビュー = 保存した結果を読む (速い、更新するまで古い)
- 「同じ集計を何度も」「ダッシュボードの応答を速く」→ マテリアライズドビュー、と覚えます。
④移行するか、遠隔から読むか
| 判断の観点 | 移行 (ロード、、) | 遠隔から読む (、) |
|---|---|---|
| 読む頻度 | 高い | 低い・ときどき |
| データ量 | 大量でも速く読める | 大量に毎回読むと遅く高い |
| 鮮度 | 複製の遅れがある (zero-ETL は数秒〜) | 読んだ時点の値 (フェデレーテッドクエリ) |
| 保管コスト | の容量を使う | や元の DB のまま |
| パイプラインの手間 | ロードや複製の仕組みが要る (zero-ETL なら少ない) | 外部スキーマを作るだけ |
組み合わせも定石です。直近のホットデータは Redshift のテーブル、古い履歴は S3 に して Spectrum、運用 DB の最新の在庫はフェデレーテッドクエリ、ダッシュボードの集計は、という構成です。
⑤その他のデータを動かさない仕組み
| 仕組み | 内容 |
|---|---|
| データベース間クエリ | 同じクラスター内の別データベースのテーブルを、3つの部分の名前 (database.schema.table) で参照する |
| データ共有 | 別のクラスター・ワークグループ・アカウントへ、コピーせずにライブのデータを読ませる (「 のアクセス制御とデータ共有」の章) |
| の | Athena から のコネクタで や などを問い合わせる (「Amazon Athena」の章) |
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶもの |
|---|---|
| の履歴を のテーブルと結合、ロードしたくない | |
| Redshift のストレージを減らしつつ古いデータも で読む | で S3 へ移し、Spectrum の外部テーブル |
| Spectrum の費用を下げたい | 、圧縮、パーティションでの絞り込み |
| / の最新の値を なしで結合 | |
| 運用 DB の大量データを頻繁に分析 | 統合や で Redshift へ複製 |
| 同じ重い集計を繰り返す、ダッシュボードが遅い | (AUTO REFRESH) |
| ビューの更新を速くしたい | 増分更新できる形のマテリアライズドビュー |
| 既存のクエリを変えずに速くしたい | 自動クエリ書き換え、自動マテリアライズドビュー |
| 別のアカウントにデータをコピーせず見せたい | データ共有 |
②よくある誤答
- で、運用 DB の数億行を毎回集計すること。運用 DB に負荷がかかります。複製するかに結果を持ちます。
- で CSV のまま大量のデータを読むこと。スキャン量が増えて遅く高くなります。
- マテリアライズドビューが常に最新だと考えること。更新するまでは前回の結果です。
- フェデレーテッドクエリの対象に を選ぶこと。対象は / の PostgreSQL と MySQL です。