Posted at

AWS認定Big Data勉強記 - 6.1: Redshift Spectrum

こんにちは、えいりんぐーです。

今回はRedshift Spectrumについてまとめます。


Q: Redshift Spectrum とは何ですか?

Redshift Spectrum は、ロードや ETL を必要とすることなく Amazon S3 のエクサバイト単位の非構造化データに対してクエリを実行できる Amazon Redshift の機能です。クエリを発行すると、クエリはクエリ計画を生成および最適化する Amazon Redshift SQL エンドポイントに移動します。Redshift はどのデータがローカルでどのデータが Amazon S3 にあるかを特定し、読み込む必要がある Amazon S3 データの量を最小化する計画を生成して、リソースプールから Amazon Redshift Spectrum の作業者に Amazon S3 からデータの読み込みと処理を要求します。


参考資料

基本的に以下の資料をもとにしています。


特徴


  1. エクサバイト級までスケール

  2. 高速

  3. オンデマンド・クエリ毎の費用

  4. オープンファイルフォーマット

  5. データを移動せずにクエリ

  6. フルマネージド


ユースケース


  • 定期的に追加されるデータをS3に置く


    • 変更が少ないデータはRedshiftに



  • アクセス頻度が低いデータをS3に置く


    • 頻繁にアクセスされる直近のデータはRedshiftに



  • S3上のデータを複数Redshiftクラスターで共有したい時


    • 同時実行性能の向上

    • 複数AZによる可用性の向上




S3を直接クエリできるメリット


  • Redshiftのクエリがそのまま活用できる

  • ローディングにかかる手間が不要

  • ファイルフォーマットを変更する必要がない

  • RedshiftのデータとS3のデータをジョイン

  • 1つのS3のデータに複数のRedshiftクラスターからアクセス可能


使い方


  1. S3にファイルを作成


    1. csv, parquet, sequencefileなどの形式。gzipなどの圧縮にも対応

    2. S3にアクセスできるIAMロールを用意




  2. CREATE EXTERNAL SCHEMA でクラスターとデータカタログもしくはHive Metastoreを接続


    1. Athenaか独自Hive Metastoreを利用する




  3. CREATE EXTERNAL TABLE で外部表としてS3データを定義

  4. クエリを実行 (SELECT COUNT(*) FROM ...)


ベストプラクティス


  • 読み取りデータ量の削減


    • 圧縮

    • 列指向フォーマット

    • サイズを揃える

    • パーティショニング


      • 検索されるレンジに従ってフォルダを作成してファイルを格納する

      • 日付など





  • 表の配置


    • ファクト表をS3に、ディメンション表をRedshiftに置く



  • 効果的なクエリ


    • 必要な列だけ取得

    • アグリゲーション、フィルターで戻すデータを最小にする




暗号化

Redshift Spectrum は、AWS Key Management Service (KMS) によって管理されるアカウントのデフォルトキーを使用して、Amazon S3 のサーバー側の暗号化 (SSE) をサポートします。


Amazon Athenaとの使い分け


  • Amazon Athena は、従業員が Amazon S3 のデータに対してアドホッククエリを実行できるようにする最も簡単な方法です。Athena はサーバーが不要です。そのため、セットアップや管理のためのインフラストラクチャがなく、即座にデータ分析を開始できます。

  • 頻繁にアクセスされるデータが存在し、そのデータを一貫性のある高度に構造化された形式で保存する必要がある場合は、Amazon Redshift のようなデータウェアハウスを使用します。これにより柔軟性が増します。頻繁にアクセスされる構造化データを Amazon Redshift に保存し、Redshift Spectrum を使用して Amazon Redshift のクエリを Amazon S3 データレイク内のデータ全体に拡張することができます。これにより、任意の場所に任意の形式でデータを保存でき、必要なときに処理することができます。