将unixshell中的字符串变量解析为hiveql

bxjv4tth  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(398)

我有一个shell脚本文件,可以解析数值和字符串变量。下面是一个例子:
shell脚本

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

另外,我在相应的文件“mytask.hql”中有一个配置单元查询,如下所示:
hiveql文件

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

问题是,我希望在每一行中都有一列包含消息“hello world”或外部-来自unix shell脚本-变量包含的任何内容,但出现以下错误:
[错误10004]:行无效的表别名或列引用“hello\u world”:(可能的列名为:col1、col2(等等)
我想要的输出是这样的:

6yt4nkrj

6yt4nkrj1#

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\u世界中解析的,没有引号它看起来像一列,而不是一个常量,这就是为什么会出现这样的异常。

相关问题