Hive查询输出异常求助:多余配置信息混入结果
解决Hive查询输出混入配置信息的问题
问题原因
你在hive -e语句中执行的set命令会输出配置生效的反馈信息,这些信息被一同捕获到cycle_cut变量中,导致最终输出出现多余的配置内容。
解决方案
方案1:使用--hiveconf传递配置(推荐)
将配置参数通过--hiveconf参数传入Hive,避免set命令产生输出:
cycle_cut=$(hive --hiveconf mapred.job.queue.name=test --hiveconf hive.cli.print.header=false -e "SELECT '2022-10-27'"); echo " Last cycle cut for US: $cycle_cut "
这种方式下Hive仅返回查询结果,不会输出任何配置相关信息。
方案2:过滤查询输出
如果必须在-e语句中保留set命令,可以通过文本过滤工具提取目标结果:
- 用
grep匹配日期格式的行:
cycle_cut=$(hive -e "set mapred.job.queue.name=test;SET hive.cli.print.header=false;SELECT '2022-10-27'" | grep -E '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'); echo " Last cycle cut for US: $cycle_cut "
- 用
awk提取最后一行(假设查询结果是输出的最后一行):
cycle_cut=$(hive -e "set mapred.job.queue.name=test;SET hive.cli.print.header=false;SELECT '2022-10-27'" | awk 'END{print}'); echo " Last cycle cut for US: $cycle_cut "
方案3:屏蔽set命令的输出
在每个set命令后添加重定向,将输出丢弃:
cycle_cut=$(hive -e "set mapred.job.queue.name=test >/dev/null 2>&1;SET hive.cli.print.header=false >/dev/null 2>&1;SELECT '2022-10-27'"); echo " Last cycle cut for US: $cycle_cut "
注:部分Hive版本可能不支持在-e语句内单独对set命令做重定向,此时优先使用方案1。
内容的提问来源于stack exchange,提问作者Aastha
相关产品推荐
相关产品推荐

