关于纠正《Hive权威指南》中的结论~“hive在使用set自定义变量时,hivevar命名空间是可选的”~的论证...

本文详细介绍了如何在Hive中使用--define命令定义自定义变量,探讨了变量在hivevar命名空间下的作用及其不可忽视的重要性。通过实践操作,对比了带与不带命名空间的效果,揭示了变量命名空间在实际应用中的关键性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

    根据《Hive权威指南》上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义的变量以便在Hive脚本中引用。当用户使用这个功能时,Hive会将这个键值对放在hivevar命名空间下。并且,hivevar这个命名空间在使用过程中是可选的,也就是说可写可不写,自定义的变量都会放在hivevar这个命名空间下。

 

为了支持上面的观点,书上做了下面的操作。我为了亲自体会,使用的是hive-0.13.0。

1.使用hive --define foo=bar语句,在hive中定义一个变量名为foo,值为bar;

效果图如下:

2.使用set foo;查看变量foo的值,从效果图可以看出,foo的值确实为bar。

效果图如下:

3.再使用set hivevar:foo;查看hivevar命名空间下的变量foo的值,从效果图可以看出,hivevar命名空间下的变量foo的值确实为bar。测试到这里,已经可以给人感觉加不加hivevar:这个命名空间名结果都是一样的。

效果图如下:

4.书中为了更确定的证明结论的正确性,又使用set hivavar:foo=bar2;改变foo的值,并使用set fool;和set hivevar:foo;查看不带命名空间和带命名空间的foo的值是否都已经改变。根据效果图可以看出,两个foo确实已经改变,证毕。于是书中给了开篇所说的结论。

效果图如下:

5.注意:下面我们来分析一下,既然hivevar:命名空间是可选的,那么我们使用set foo=bar3;再次改变foo的值,带命名空间和不带命名空间的foo的值都应该变成bar3,下面我们做此测试,根据效果图可以看到,结果并不如我们推测的那样,而是不带命名空间的foo值变成了bar3,带命名空间的foo的值竟然没有变化!

效果图如下:

结论:

“在hive中使用set操作自定义变量时,hivevar:命名空间不是可选的,应该是在使用set定义变量时时刻加hivevar:命名空间,以免出现难以找出的错误。”

附加:

“因为--define key=value实际上与--hivevar key=value是等价的,所以无论你习惯使用上面哪个操作自定义变量,都要加命名空间,不然都存在以上说的问题”

 

转载于:https://www.cnblogs.com/superpang/p/4639145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值