我有每天最多5-10 gb数据的日常事务。在我看来,按月份划分更有意义。。
举个例子:
我的表包含以下列:
事务处理日期时间戳—事务处理日期
交易金额整数-交易金额
dwhèu partition string—进入按节分区的技术字段
现在我想查询2015年1月15日到2015年11月15日之间的交易金额。
我的问题是
select sum(TRANSACTION_AMOUNT) from TEST where TRANSACTION_DATE >= CAST('2015-01-15' as timestamp) AND TRANSACTION_DATE < CAST('2015-11-15' as timestamp)
此查询返回正确的数据,但它执行完整表扫描,而我希望它只使用分区2015-01、2015-02。。。。2015-11.
为此,我需要手动指定应该使用哪些分区,以便查询如下:
select sum(TRANSACTION_AMOUNT) from TEST where TRANSACTION_DATE >= CAST('2015-01-15' as timestamp) AND TRANSACTION_DATE < CAST('2015-11-15' as timestamp) and DWH_PARTITION in ('2015-01',.........'2015-11');
因为我们不能按时间戳进行分区,所以业务分析师必须知道确切的分区模式(给定的表是否按月份、日期等进行分区)。
还请注意,有关日期的信息需要指定两次:一次用于事务日期,另一次用于分区。
您知道一些分区方法吗?这些方法可以帮助避免两次指定相同的信息,并且使用户不必知道他们需要查询的所有表的分区模式?
1条答案
按热度按时间u59ebvdq1#
它只能通过范围分区来实现,目前不受支持。也许自定义项会有帮助,但100%不确定。
我们通过提供简单的web界面解决了这个问题,用户可以在这个界面中选择表、过滤列,并且under-the-covers应用程序足够智能,能够利用分区修剪生成查询。