如果我有一个包含本地表和外部表之间的联合的视图,像这样(伪代码):
create view vwPageViews as
select from PageViews
union all
select from PageViewsHistory
PageViews在过去的2年。
- 如果用户从视图中选择了过去6个月的过滤器,RS Spectrum如何处理它—它是否读取整个外部表,即使没有返回(并因此花费我们所有的钱)?(假设s3文件是基于拼花的)。
。
Select from vwPageViews where MyDate >= '01/01/2021'
使用RS和Spectrum查询冷数据和历史数据的最佳方法是什么?谢谢!
如何在Spectrum上发生取决于您是否为S3中的数据提供了分区。如果没有分区(以及分区上的where子句),S3中的Spectrum引擎将不得不读取每个文件,以确定所需的数据是否在其中任何一个文件中。这样做的成本将取决于文件的数量和大小以及它们的格式。(例如,CSV比Parquet贵)
解决这个问题的方法是在S3中对数据进行分区,并对分区值使用WHERE子句。这将排除需要读取的文件,当他们不匹配分区值。
问题在于为分区提供WHERE子句,因为这可能比您在基本数据中使用的日期或时间戳粒度更小。例如,如果您在YearMonth (YYYYMM)上进行分区,并且希望有一个日级别的WHERE子句,那么您将需要为WHERE子句添加2个部分—WHERE date_col>= 2015-07-12 and part_col>= 201507。如何产生这两个WHERE条件将取决于你在红移周围的解决方案。