翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
) -
集計関数 (、、、
COUNT
SUM
AVG
MIN
、 などMAX
) -
regex_replace
、to_upper
、date_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 レイヤーに処理をプッシュできるたびに全体的なパフォーマンスが向上します。