首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏未返回预期结果

宏未返回预期结果
EN

Stack Overflow用户
提问于 2014-09-01 20:48:55
回答 1查看 3.9K关注 0票数 0

我使用Hive临时宏来帮助进行日期代数(在本例中是前一个月的第一天),并且得到了意想不到的结果。

创建临时宏month1st_sub(dt日期) 铸(凹槽) 案例 当月份(Dt)=1时,则转换为(年份(Dt)-1为字符串) 其他转换(年份(Dt)为字符串) 结束, "-“ 案例 当月份(Dt)=1,然后"12“ 其他转换(月份(Dt)-1为字符串) 结束, "-01“ )作为日期) ;

当我使用包含max_dt单个值的vars表(8-15-2014)测试此宏时,使用如下方法:

选择 max_dt, month1st_sub(cast("2013-1-1“为日期), month1st_sub(max_dt) month1st_sub(cast("2013-1-1“为日期), month1st_sub(cast("2013-4-1“为日期), month1st_sub(cast("2013-5-1“为日期), month1st_sub(cast("2013-6-1“为日期)) 来自vars;

我收到以下输出:

max_dt _c1 _c2 _c3 _c4 _c5 _c6 2013-08-01 2012-12-01 2013-07-01

最后一次返回的值为2013-07-01,应为2013-05-01.如果删除6-1行,则5-1行将返回2013-07-01,此错误是可重复的。此问题似乎始终与一组宏调用的最后返回值有关。

我使用的设置如下:

设置hive.cli.print.header=true; 设置mapreduce.input.fileinputformat.split.maxsize=10000000; 集合hive.auto.convert.join = true; 设置hive.exec.dynamic.partition.mode=nonstrict;

问题1:我做错什么了吗?如果不是,这是蜂巢的问题,还是可能是一些环境问题?

问题2: hive中的临时宏功能是否足够值得信任,可以使用,还是应该编写java udfs来实现?

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 13:08:05

老问题,我知道。

宏实现中有许多重要的错误,大部分应该在2.1.0之前解决。来自https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

截至蜂巢0.12.0。 错误修复:在Hive 1.3.0和2.0.0之前: 当处理同一行时多次使用HiveQL宏时,即使参数不同,Hive也会对所有调用返回相同的结果。(见蜂箱-11432。) 在Hive 1.3.0和2.0.0之前:当处理同一行时使用多个宏时,ORDER子句可能会给出错误的结果。(见蜂箱-12277。) 在Hive2.1.0之前:当处理同一行时使用多个宏时,后面的宏的结果被第一个宏的结果覆盖。(见蜂箱-13372。)

我建议将hive更新到这两个版本中的一个,以解决您的问题。

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

https://stackoverflow.com/questions/25612739

复制
相关文章

相似问题

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