我是一名分析师,试图构建一个查询,从hadoop中的表中提取过去7天的数据。表本身是按日期划分的。
当我用硬编码的日期测试查询时,一切都按预期进行。但是,当我编写它来根据今天的时间戳进行计算时,它正在进行全表扫描,我不得不终止该作业。
示例查询:
SELECT * FROM target_table
WHERE date >= DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),7);
如果您能给我一些建议,告诉我如何在避免全表扫描的同时修改查询,我将不胜感激。
谢谢您!
2条答案
按热度按时间jvidinwx1#
我不确定我是否有一个优雅的解决方案,但是因为我使用oozie来协调工作流,所以我从oozie传递开始日期和结束日期。在没有oozie的情况下,我可以使用bash来计算适当的日期,并将它们作为参数传入。
分区过滤器一直都有这个问题,所以我找到了一个解决方法。
dddzy1tm2#
我有一些变通办法,它适用于我,如果没有日期超过30/60/90/120。
查询式
sub_days=通过参数,这里可能是7