linux - 管道 envsubst 输出到配置单元

标签 linux bash hive

使用 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/

相关文章:

python - pip 安装报告实验室错误 : command 'x86_64-linux-gnu-gcc' failed with exit status 1

linux - 如何使用shell从另一个文件中的相应条目中减去一个文件中的每个条目

php - 为 Apache 而不是 CLI 启用 PHP 扩展

c++ - GCC 4.9.1 在 RHEL 6.0 上编译失败,编译错误在 "libsanitizer"

python - 如何在我自己的应用程序中加载 NPAPI 插件?

java - 在shell脚本中设置环境变量并在Java程序中访问

linux - 为什么卸载 Apache2 会尝试安装 PHP5-CGI?

java - 从Java Map Reduce代码读取Hive托管表

hadoop - 使用复合输入格式

hadoop - 有什么方法可以使Hive使用Unicode表和列名?