Hive中如何从HDFS文件读取值设置变量?
在Hive中从HDFS文件读取值设置为变量的实现方法
没问题,虽然Hive本身没有直接用SET命令读取HDFS文件值的语法,但咱们可以通过结合Shell脚本或者Hive临时表的方式实现这个需求,下面给你两种常用的方法:
方法1:Shell前置读取,传递给Hive变量
这种方法最直接,先通过Shell命令读取HDFS文件的内容,再把这个值作为hiveconf变量传递给Hive会话:
- 在Shell中执行命令,读取HDFS文件内容到Shell变量(顺便去除可能的换行符,避免变量带多余格式):
var_value=$(hdfs dfs -cat /user/rc/text.csv | tr -d '\n')
- 启动Hive并传递这个变量:
hive --hiveconf var1="$var_value"
- 进入Hive会话后,就可以直接使用这个变量了:
SELECT ${hiveconf:var1};
方法2:Hive临时表配合Shell捕获结果
如果需要在Hive内部先对文件内容做简单处理(比如过滤、转换)再赋值变量,可以先创建临时表加载文件,再通过Shell捕获查询结果:
- 先在Hive中创建临时表并加载HDFS文件:
CREATE TEMPORARY TABLE temp_single_val (val STRING); LOAD DATA INPATH '/user/rc/text.csv' INTO TABLE temp_single_val;
- 在Shell中执行Hive查询,把结果赋值给变量:
var_value=$(hive -e "SELECT val FROM temp_single_val;" | tr -d '\n')
- 再启动Hive并传递变量,后续用法和方法1一致:
hive --hiveconf var1="$var_value"
小提示
如果你的HDFS文件里除了目标值还有多余的空格、换行符,记得用tr或者sed命令清理一下,避免变量值不符合预期;临时表方法适合需要预处理文件内容的场景,而方法1更适合文件内容直接就是目标值的情况。
内容的提问来源于stack exchange,提问作者R.C
相关产品推荐
相关产品推荐

