hive变量命名空间有四个:hivevar,hiveconf,system,env。
(上图来自《hive编程指南》)
hive cli启动时可通过--define和--hivevar、--hiveconf来自定义变量。
其中--define和--hivevar的作用是一样的,都是在hivevar命名空间定义变量。
hive cli --define y=1
hive cli --hivevar y=1
hive> set y;
y=1
hive> set hivevar:y;
hivevar:y=1
hive> set hiveconf:y;
hiveconf:y is undefined as a hive configuration variable
Query returned non-zero code: 1, cause: null
通过set查看y的值,发现这个变量y是定义在hivevar命名空间。
在hive cli启动时也可定义hiveconf命名空间的变量
hive cli --hiveconf y=2
验证一下
hive> set y;
y=2
hive> set hivevar:y;
hivevar:y is undefined as a hive variable
Query returned non-zero code: 1, cause: null
hive> set hiveconf:y;
hiveconf:y=2
进入hive之后,通过set直接修改的变量都是在hiveconf内生效。
hive> set hiveconf:y;
hiveconf:y=2
hive> set y=3;
hive> set y;
y=3
hive> set hiveconf:y;
hiveconf:y=3
因此,set hive.cli.print.current.db=true;这种配置都是在hiveconf空间生效。
若要自定义变量,建议在hivevar中定义,如set hivevar:y=4;使用变量只需 ${hivevar:y}