在单个表上有一个独特的查询
select distinct d, e, f, a, b, c from t where a = 1 and e = 2;
cols a,b,c中不同值的数量为高(高列基数),而cols d,e,f为低基数列。我的数据在S3中采用ORC格式,并且在Athena和Redshift频谱中都有指向同一文件的外部表。
在雅典娜中运行上述查询时,它会在几秒钟后返回,而在红移频谱中,则需要几分钟。
但是当我在选择列表的末尾移动col f时,它在Redshift频谱中也可以正常工作。这仅发生在该特定列上,我的意思是最后移动d或e没有任何区别,即它们运行时间更长。 col f和其他列一样都是varchar列,此列的最大长度为30个字节。
两个问题
(a)任何特殊行为的见解或指针,将col f移到列表的末尾会使它运行更快,而将其置于中间会使它变慢
(b)是否有建议的SQL最佳实践,以不同或分组依据语句中列基数的降序列出列?如果将基数较低的列放在第一位或以混合排列的方式放在执行时间上会有所不同?
答案 0 :(得分:0)
将Redshift驱动程序更新到最新版本通常可以使Redshift Spectrum速度几乎与Athena一致。
https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html#download-jdbc-driver
这可能不是用例的原因,但是绝对值得一试!