非Hive Metastore Server节点执行load命令时出现“cannot recognize input near '<EOF>' '<EOF>' '<EOF>' in switch database statement”
我的脚本如下
dbname=bigdata month=$(date -d 0"month ago"${date} +%Y%m) #删除分区及数据 ssh root@bda1node06 "hive -e 'use "${dbname}";ALTER TABLE tablename DROP IF EXISTS PARTITION (pt="${month}")'" #创建分区 ssh root@bda1node06 "hive -e 'use "${dbname}";ALTER TABLE tablename ADD PARTITION (pt="${month}")'" #把HDFS上的数导入到HIve表中 ssh root@bda1node06 "hive -e \"use ${dbname};load data inpath '/data/roaddist/*' overwrite into table tablename partition(pt=${month})\""
原因分析:使用双引号进行包括,则"hive -e"会认为后面的内容作为一个单独的参数传给hive 否则会解析成为多个参数造成错误。
liunx的特殊字符转义规则
传递参数全部使用""引号,参数内有"和`,需要用\转义.除此之外还有^、] 、[ 等