管道envsubst输出到配置单元

时间:2016-07-06 19:51:40

标签: linux bash hive

使用Hive 0.13.0,我想针对模板评估变量,然后立即执行生成的Hive代码(最好避免使用临时中间文件)。

以下是我想做的一个(非工作)示例:

template.hql

SELECT COUNT(*) FROM ${TABLE};

在shell中:

export TABLE=DEFAULT.FOOTABLE
envsubst < template.hql | hive

是否有一个特殊的原因,这不起作用,是否有适当的方法来实现它?

1 个答案:

答案 0 :(得分:3)

替换按预期工作:

$ cat template.hql
SELECT COUNT(*) FROM ${TABLE};
$ export TABLE=DEFAULT.FOOTABLE
$ envsubst < template.hql
SELECT COUNT(*) FROM DEFAULT.FOOTABLE;

所以我怀疑hive没有读取标准中的查询。我从an online manual看到它支持-f参数,因此您可以手动创建文件:

TMPFILE=$(mktemp)
envsubst < template.hql > $TMPFILE
hive -f $TMPFILE
rm $TMPFILE

如果您使用的是新版本的bash,则可以避免使用中间文件:

hive -f <( envsubst < template.hql )

我不确定,但也检查hive -f -是否可以从标准输入读取。