hive中的传参与变量

发现自己确实越来越笨,好在解决了。

通常将hive的连接信息和sql语句写在一个脚本里面执行,这样看起来方便,修改起来也方便。

但是最近由于sql语句太长了,所以拆开两部分。一部分是hive的连接,另一部分是sql文件。通过-f传参执行。

beeline --hiveconf mapreduce.job.queuename=prod \
--hivevar data_day=${curr_dt} \
--hivevar product_a01=$product_a01 \
--hivevar product_a02=$product_a02 \
--hivevar product_b01=$product_b01 \
--hivevar product_b02=$product_b02 \
--hivevar product_b03=$product_b03 \
--hivevar product_c01=$product_c01 \
--hivevar product_d01=$product_d01 \
 -u 'jdbc:hive2://localhost:10000/default' -n "user" -p 'pwd' -f /home/hadoop/etl/test.sql

这里面用到了参数hivevar传递。

之前一个文件时,接收变量都是直接$var1或者${var1},所以在test.sql中也是使用${var1}这样的方式来接收。但是发现放到一个shell循环中执行test.sql 出现不是想要的结果。

select * from table where day = '${data_day}';

最终在sql中修改成如下引用参数

select * from table where day = '${hivevar:data_day}';

 


 

hive -f传参有两种,

一种是hiveconf 用于传递系统配置类的参数,当然用来传递自定义变量也可以。

一种是hivevar 用于传递用户自定义变量

 

posted @ 2021-09-26 12:42  硅谷工具人  阅读(642)  评论(0编辑  收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。