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_partitioneds3_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 レイヤーに処理をプッシュできるたびに全体的なパフォーマンスが向上します。