Shell脚本中Impala查询结果条件判断不生效 仅执行else分支求助
Shell脚本告警逻辑异常排查方案
核心问题原因
- Impala查询返回字段不符合预期:当前SQL返回
calendar和row_count两个字段,变量strata最终存储的是类似20240520 1234的带空格字符串,不可能和数值0相等,所以if判断永远不触发。 - 无匹配记录时返回值不是0:当WHERE条件过滤后无匹配数据时,你加了
GROUP BY calendar的查询返回的是空值而不是0,也无法匹配等于0的判断逻辑。 - Shell语法不严谨:if判断中
$strata没有加双引号包裹,当变量为空或者包含空格时会触发语法错误,导致条件判断失效直接走else分支。 - Shebang声明错误:开头的解释器声明写为
#!bin/sh,缺少根路径斜杠,部分系统下会无法正确识别sh解释器。
修复方案
修改SQL仅返回统计计数,同时修正Shell判断语法,修复后脚本如下:
#!/bin/sh # 仅返回统计计数,无匹配时也会返回0而不是空 strata=$(impala connection string -q "SELECT COUNT(*) row_count FROM TABLE WHERE calendar = CAST(from_unixtime(unix_timestamp(now() - interval 1 days), 'yyyyMMdd') AS INT);") # 变量加双引号包裹,兼容空值异常场景 if [ "$strata" -eq 0 ] ;then echo -e 'The table HAS NOT been refreshed today, kindly hold' | mailx -s 'Alerting:Refresh_Status' -c email.address -- email.address else echo -e "The number of records is $strata" | mailx -s 'Alerting: Refresh_Status' -c email.address -- email.address fi
你可以在变量赋值后添加一行echo "strata的值为: $strata",执行脚本查看输出确认变量值是否符合预期。
内容的提问来源于stack exchange,提问作者Oye
相关产品推荐
相关产品推荐

