Hadoop 使用计算查询分区并避免全表扫描

Hadoop 使用计算查询分区并避免全表扫描,hadoop,hql,hadoop-partitioning,Hadoop,Hql,Hadoop Partitioning,我是一名分析师,试图构建一个查询,从Hadoop中的表中提取过去7天的数据。表本身是按日期划分的 当我用硬编码日期测试我的查询时,一切都按预期进行。然而,当我编写它来根据今天的时间戳进行计算时,它正在进行全表扫描,我不得不终止这项工作 示例查询: SELECT * FROM target_table WHERE date >= DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),7); 如果您能给我一些建议,告诉我如何在避免全表

我是一名分析师,试图构建一个查询,从Hadoop中的表中提取过去7天的数据。表本身是按日期划分的

当我用硬编码日期测试我的查询时,一切都按预期进行。然而,当我编写它来根据今天的时间戳进行计算时,它正在进行全表扫描,我不得不终止这项工作

示例查询:

SELECT * FROM target_table 
WHERE date  >= DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),7);
如果您能给我一些建议,告诉我如何在避免全表扫描的同时修改查询,我将不胜感激


谢谢大家!

我不确定我是否有一个优雅的解决方案,但因为我使用Oozie进行工作流协调,所以我从Oozie传入开始日期和结束日期。在没有Oozie的情况下,我可以使用bash来计算适当的日期,并将它们作为参数传入


分区过滤器一直都有这个问题,所以我找到了一个解决方法。

我有一些解决方法,如果日期数超过30/60/90/120,它对我很有效

查询式


sub_days=通过参数,这里可能是7

谢谢。也许我也可以把Oozie作为一个选择。嗨,Debjit,我尝试过你的方法,但出于某种原因,它对我来说仍然像是一个表格扫描。让我再试验一下。如果你有其他想法,我会很感激的。非常感谢。对于延迟回复的共享,我想,您可以使用蜂巢Bucketing功能查询相同的内容。这些将帮助解决您的问题。我并没有太多的解决办法使用扣,但一些样品已经检查,并发现扣的概念有更好的工作。
(((unix_timestamp(date,'yyyy-MM-dd')) >= (unix_timestamp(date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') ,${sub_days}),'yyyy-MM-dd'))) and((unix_timestamp(date,'yyyy-MM-dd')) <= (unix_timestamp(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),'yyyy-MM-dd'))))