发布于: Dec 21, 2017

Amazon Redshift 现在使用延迟具体化减少扫描数据量,并利用谓词筛选改善查询性能。

延迟具体化 (行级别的筛选) 可在筛选谓词时进行批处理和因子分解,然后再获取下一列的数据块,利用筛选条件减少查询的 I/O。例如,假设一个查询在两列上进行筛选,它所处理的 CUSTOMER_DETAIL 表有一百万行:

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% 的 I/O,从而改善查询性能。同时,一次批量扫描多列而不是一行,也使性能得到进一步提升。 

在此版本中,我们在 STL_SCAN 表中新增了“is_rlf_scan”列。如果查询使用了延迟具体化,此列的值为 't' 或 TRUE;否则值为 'f' 或 FALSE。

Amazon Redshift 默认启用延迟具体化。如果 Redshift 检测到可以提升查询性能,将自动为查询触发延迟具体化。延迟具体化通过最新版本 1.0.1583 在所有 AWS 区域提供。