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