Amazon Redshift Spectrum を使用するためのベストプラクティス - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Redshift Spectrum を使用するためのベストプラクティス

このセクションでは、Amazon Redshift Spectrum を使用するためのベストプラクティスの概要を説明します。Redshift Spectrum を使用する際に最適なパフォーマンスを実現するには、以下のベストプラクティスに従うことをお勧めします。

  • ファイルタイプが Redshift Spectrum クエリのパフォーマンスに大きな影響を与えることを検討してください。パフォーマンスを向上させるには、ORC や Parquet などの列エンコードされたファイルを使用し、非常に小さなディメンションテーブルにのみ CSV 形式を使用します。

  • プレフィックスベースのパーティショニングを使用して、パーティションプルーニングを活用します。つまり、データレイク内のパーティションにキー指定されたフィルターを使用します。

  • Redshift Spectrum は大規模なリクエストを処理するために自動的にスケーリングされるため、Redshift Spectrum ではできるだけ多くの処理を行います (述語のプッシュダウンなど)。

  • 頻繁にフィルタリングされる列のパーティションファイルには注意してください。データが 1 つ以上のフィルタリングされた列によってパーティション分割されている場合、Redshift Spectrum はパーティションプルーニングを活用し、不要なパーティションやファイルのスキャンをスキップできます。一般的な方法では、時間に基づいてデータをパーティション化します。

  • 次のクエリを使用して、パーティションの有効性と Redshift Spectrum クエリの効率を確認できます。

    Select query, segment, max(assigned_partitions) as total_partitions, max(qualified_partitions) as qualified_partitions From svl_s3partition Where query=pg_last_query_id() Group by 1,2;

    前述のクエリは以下を示しています。

    • total_partitions – によって認識されるパーティションの数 AWS Glue Data Catalog

    • qualified_partitions – Redshift Spectrum クエリでアクセスされる Amazon Simple Storage Service (Amazon S3) のプレフィックスの数

  • SVL_S3QUERY_SUMMARY システムテーブルをチェックして、パーティションの有効性と Redshift Spectrum クエリの効率を確認することもできます。これを行うには、以下のステートメントを実行します。

    Select * From svl_s3query_summary Where query=pg_last_query_id();

    上記のクエリは、パーティションプルーニングの効率を示すファイルに加えてis_partitioned、、s3_scanned_rows/bytes、および s3_returned_rows/bytes値を含むさらに多くの情報を返します。

Redshift Spectrum での述語のプッシュダウン

述語プッシュダウンを使用すると、Amazon Redshift クラスターでリソースを消費することを回避できます。多くの SQL オペレーションを Redshift Spectrum レイヤーにプッシュダウンできます。これを可能な限り活用することをお勧めします。

以下に留意してください。

  • Redshift Spectrum レイヤー内では、次のような一部のタイプの SQL オペレーションを完全に評価できます。

    • GROUP BY

    • 比較条件とパターンマッチング条件 (例: LIKE

    • 集計関数 (、、COUNTSUMAVGMIN、 などMAX

    • regex_replaceto_upperdate_trunc、およびその他の関数

  • DISTINCT および を含む一部のオペレーションを Redshift Spectrum レイヤーにプッシュすることはできませんORDER BY。ソートはリーダーノードで実行されるため、可能であればクエリの最上位ORDER BYでのみ実行します。

  • クエリEXPLAINプランを調べて、述語のプッシュダウンが有効かどうかを確認します。EXPLAIN コマンドで Redshift Spectrum の部分を検索するには、次のステップを探します。

    • S3 Seq Scan

    • S3 HashAggregate

    • S3 Query Scan

    • Seq Scan PartitionInfo

    • Partition Loop

  • クエリの列数を最小にします。Redshift Spectrum では、データが Parquet 形式または ORC 形式の場合、スキャンする列を排除できます。

  • 並列処理とパーティション排除のためにパーティションを幅広く使用し、可能であればファイルサイズを 64 MB 以上に維持します。

  • CREATE EXTERNAL TABLE または TABLE PROPERTIES'numRows'='nnn'を使用する場合は、 を設定しますALTER TABLE。Amazon Redshift は、外部テーブルを分析して、クエリオプティマイザがクエリプランの生成に使用するテーブル統計を生成しません。統計が設定されていない場合、Amazon Redshift は外部テーブルが大きなテーブルであり、ローカルテーブルが小さいテーブルであると想定します。

Redshift Spectrum のクエリ調整のヒント

クエリを調整するときは、次の点に注意してください。

  • Amazon Redshift クラスターがクエリにエンゲージできる Redshift Spectrum ノードの数は、クラスター内のスライスの数に関連付けられます。

  • クラスターのサイズを変更すると、クラスターのローカルコンピューティングプロファイル、ストレージプロファイル、Amazon S3 データレイククエリのクエリ機能にメリットがあります。

  • Amazon Redshift クエリプランナーは、述語と集計を可能な限り Redshift Spectrum クエリレイヤーにプッシュします。

  • Amazon S3 から大量のデータが返されると、クラスターのリソースによって処理が制限されます。

  • Redshift Spectrum は大規模なリクエストを処理するように自動的にスケールするため、Redshift Spectrum レイヤーに処理をプッシュできるたびに全体的なパフォーマンスが向上します。