将字符串变量从Unix Shell解析为HiveQL

时间:2018-10-26 13:54:12

标签: unix hive

我有一个Shell脚本文件,可以解析数字和字符串变量。下面的示例:

Shell脚本

hive --hiveconf time_1=34600 --hiveconf time_2=34588 --hiveconf message="hello_world" -f mytask.hql

我也在相应文件'mytask.hql'中有一个Hive查询,如下所示:

HiveQL文件

SELECT col1, col2, ${hiveconf:message} AS myMessage
FROM table1
WHERE trtime between ${hiveconf:time_1} and ${hiveconf:time_2};

问题是我想在每一行中都包含一列包含消息“ Hello world”或任何外部变量(来自Unix Shell Script),但是我收到以下错误:

  

[错误10004]:第 xxx 行:无效的表别名或列引用“ hello_world” :(可能的列名称为:col1,col2 ...(等等)

我想要的输出是这样的:

enter image description here

1 个答案:

答案 0 :(得分:1)

SQL中的字符串常量应使用单引号引起来:'${hiveconf:message}'

SELECT col1, col2, '${hiveconf:message}' AS myMessage
FROM table1
WHERE trtime between ${hiveconf:time_1} and ${hiveconf:time_2};

并且没有引号$ {hiveconf:message}在hello_world中得到了解决,没有引号看起来像是列,而不是常量,这就是为什么会出现这种异常的原因。