首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带计算的查询分区,避免全表扫描

带计算的查询分区,避免全表扫描
EN

Stack Overflow用户
提问于 2015-02-13 09:46:02
回答 2查看 447关注 0票数 0

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

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

示例查询:

代码语言:javascript
复制
SELECT * FROM target_table 
WHERE date  >= DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),7);

我希望得到一些建议,如何在避免全表扫描的同时修改我的查询。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-02-13 12:03:33

我不确定我是否有一个优雅的解决方案,但由于我使用Oozie进行工作流协调,所以我传入了来自Oozie的start_date和end_date。在没有Oozie的情况下,我可能会使用bash来计算适当的日期,并将它们作为参数传递。

分区筛选器一直都有这个问题,所以我给自己找了一个变通办法。

票数 0
EN

Stack Overflow用户

发布于 2015-02-13 20:04:11

我有一些变通方法,如果no of Date大于30/60/90/120,它对我有效。

类似于的查询

代码语言:javascript
复制
(((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'))))

sub_days =传递参数,这里可能是7

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28491225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档