我每天的交易量高达 5-10 GB 的数据。在我看来,按月分区更有意义..
这是一个例子:
我的表有以下列:
TRANSACTION_DATE TIMESTAMP -- 交易日期
TRANSACTION_AMOUNT INTEGER - 交易金额
DWH_PARTITION STRING -- 进入 PARTITIONED BY 部分的技术领域
现在我想查询 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');
因为我们不能按时间戳进行分区,所以业务分析师必须知道确切的分区模式(给定的表是否按月、日等进行分区)。
另请注意,有关日期的信息需要指定两次:一次用于交易日期,然后用于分区。
您是否知道一些分区方法可以帮助避免必须两次指定相同的信息并使用户不必知道他们需要查询的所有表的分区模式?