报错提示的截图
场景复现:
有对一个Hive表做数据清洗,其中某个表字段是percent;
而percent是hive的一个函数,所以写sql时需要使用反引号“`”对字段进行引用
比如:
select
id,
name,
`percent`
from XXXX
where
name = 'XXX'
在写Hive脚本时,想当然的仍然对percent字段做反引号的引用;但在实际操作中有报错
hive -e \
"select \
id, \
name, \
`percent`
from XXXXX \
where XXXXX" \
| sed -e 's/[\t]/,/g' \
| grep -v "WARN" \
| grep -v "main ERROR" \
> XXXXXX_data.csv;
因为shell脚本里,反引号“`”是有特殊的含义:shell中的反引号(` `)的作用 将反引号(` `)内的字符串当作shell命令来执行,返回值是命令的执行的结果,起到的是一个命令的替换作用。所以,在此处,percent并不是shell的命令,
才会有本文刚开始提示的报错 XXXX.sh: line XXX: percent: command not found
解决办法:应在“`”(反引号)前添加转移字符“\”,对于我这个报错场景,`percent`转变为\'percent\`
select
id,
name,
\`percent\`
from XXXXX
伪代码如下:
hive -e \
"select \
id, \
name, \
\`percent\`
from XXXXX \
where XXXXX" \
| sed -e 's/[\t]/,/g' \
| grep -v "WARN" \
| grep -v "main ERROR" \
> XXXXXX_data.csv;
此贴来自汇总贴的子问题,只是为了方便查询。
总贴请看置顶帖:
pyspark及Spark报错问题汇总及某些函数用法。