【发布时间】:2026-02-11 17:55:01
【问题描述】:
我有一个 .sh 文件,我从中将值传递给 .hql,但它给了我错误
sm=1
XXXXX=""
while read -r line
do
name="$line"
XXXXX="hive$name(${XXXX[$sm]%?})"
echo $XXXXX
hive -hiveconf var1=$XXXXX -hiveconf var2=/user/cloudera/project -hiveconf var3=$name -f test1.hql
sm=$((sm + 1))
done < "$filename"
CREATE EXTERNAL TABLE IF NOT EXISTS ${hiveconf:var1}
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
location ${hiveconf:var2/hiveconf:var3};
*请注意,$XXXXX 在读取文件和一些逻辑后正在创建一个带有模式的表名。当我回显它时,没有问题,但问题出现在 .hql 文件中。错误有点像下面:
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
失败:ParseException line 2:4 无法识别列类型中“ROW”“FORMAT”“DELIMITED”附近的输入 警告:调用了方法类 org.apache.commons.logging.impl.SLF4JLogFactory#release()。 警告:请参阅http://www.slf4j.org/codes.html#release 以获得解释。
【问题讨论】:
-
变量 XXXXX 包含“hivecategories(category_id int,category_department_id int,category_name string)”...但是当我在 hql 上回显它时,它没有传递整个值...只是“hivecategories( category_id ”,这导致了错误