投稿日: Dec 21, 2017

Amazon Redshift で、遅延マテリアライゼーションを使用することで、スキャンされるデータ量が削減され、述語フィルタを使用するクエリのパフォーマンスが改善されるようになりました。

遅延マテリアライゼーション (低レベルフィルタリング) は、データブロックを次の列に取り込む前に、述語のフィルタリングで一括処理およびファクタリングを行うことで、フィルタを使用したクエリの入出力を削減します。たとえば、1,000,000 行の CUSTOMER_DETAIL テーブルで使用されている 2 つの列をフィルタリングするクエリがあるとします。

SELECT FIRST_NAME, LAST_NAME, EMAIL, CITY, SALES_REP, 
FROM CUSTOMER_DETAIL 
WHERE CUSTOMER_SINCE_DATE < ’01-01-2000’
AND CUSTOMER_STATUS_LEVEL IN (’Gold’ , ’Silver’) ;

遅延マテリアライゼーションを使用すると、Redshift はデータを一括で CUSTOMER_SINCE_DATE および CUSTOMER_STATUS_LEVEL 列から取り込み、対応する述語を適用します。CUSTOMER_DETAIL テーブル列の 10% のみが述語フィルタに一致する場合、Redshift は残りの列の 90% の入出力を節約できる可能性があり、これによってクエリのパフォーマンスが改善されます。また、列を行ごとではなく一括でスキャンすることで、パフォーマンスがさらに改善されます。 

このリリースにより、新しい「is_rlf_scan」列が STL_SCAN テーブルに追加されました。クエリで遅延マテリアライゼーションを使用する場合、この列に「t」または「TRUE」の値が入ります。その他の場合は「f」または FALSE の値が入ります。

Amazon Redshift では遅延マテリアライゼーションがデフォルトで有効です。Redshift によってクエリのパフォーマンスが改善できると検出された場合は、クエリで自動的にトリガーされます。最新ビルド 1.0.1583 を使用することで、遅延マテリアライゼーションはすべての AWS リージョンで使用できます。