在 hive 脚本中执行 unix 命令

Posted

技术标签:

【中文标题】在 hive 脚本中执行 unix 命令【英文标题】:execute unix commands inside hive script 【发布时间】:2016-10-12 09:14:50 【问题描述】:

我正在编写 hive 脚本,我需要在 hive 脚本中读取 hdfs 中的文件并在 hive 查询中使用文件内容。 hdfs 中的文件包含单行日期。

我知道我们可以通过使用 '!' 在 hive shell 中使用 unix 命令,但我需要使用以下命令,但它无法使用!

while IFS= read -r line; do snapshot_id=$line done < <(hadoop fs -cat /hdfs_path/date.txt)

select * from <tablename> where datestring = $snapshot_id

有没有可能。 ?

【问题讨论】:

【参考方案1】:

这和你需要的差不多,

#!/bin/bash

old_IFS=$IFS
IFS=$'\n'
for line in $(hadoop fs -cat /hdfs_path/date.txt)
do
   hive -f "select * from test where datestring = $line"
done          
IFS=$old_IFS

希望对你有帮助

【讨论】:

我不想要 shell 脚本。我需要从 oozie 执行的 hql 脚本 为什么你不能在 oozie 中作为 shell 动作而不是 hive 动作运行 为什么不两者兼而有之?您应该能够将 shell 动作中的参数传递给 hive 动作

以上是关于在 hive 脚本中执行 unix 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中执行Hive命令或HiveQL

如何在Unix中的java中执行sql脚本文件

通过 shell 脚本执行 hive udf

如何在Java中执行Hive命令或HiveQL

理解Unix可执行文件

在 unix 中完成 command1 后执行 command2 的 shell 脚本