使用 Hive 0.13.0,我想根据模板评估变量,然后立即执行生成的 Hive 代码(最好避免使用临时中间文件)。
这是我想做的(非工作)示例:
模板.hql
SELECT COUNT(*) FROM ${TABLE};
在外壳中:
export TABLE=DEFAULT.FOOTABLE
envsubst < template.hql | hive
这行不通有什么特别的原因吗?有没有合适的方法来实现?
最佳答案
替换按预期工作:
$ 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 -
是否可以从标准输入读取。
关于linux - 管道 envsubst 输出到配置单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232615/