La condición de Hive en el script de shell no está funcionando como se esperaba.
La condición dentro de la consulta Hive en el script shell no funciona correctamente
Escribí un script shell para enviar alertas por correo electrónico según la condición del resultado de una consulta, pero no importa lo que suceda, siempre se envía solo la segunda parte (parte else), sin importar el resultado de la variable. Por favor, ayude a verificar. A continuación se muestra el script:
#!bin/sh
strata=$(impala cadena de conexión -q "SELECT calendario, COUNT (*) row_count FROM TABLE
WHERE calendar = CAST (from_unixtime (unix_timestamp (now () - interval 1 days), ' yyyyMMdd ') AS INT)
GROUP BY calendar
ORDER BY calendar DESC;")
si [ $strata -eq 0 ]; entonces
echo -e 'La tabla No se ha actualizado hoy, por favor espere' | mailx -s 'Alerta: Estado de actualización' -c dirección de correo electrónico -- dirección de correo electrónico
de lo contrario
echo -e El número de registros es $strata | mailx -s 'Alerta: Estado de actualización' -c dirección de correo electrónico -- dirección de correo electrónico
fi
La salida de la variable será 0
o el número de registros en la tabla, y se enviará un correo electrónico en función de eso. Pero la parte else es la única que se envía independientemente del resultado.
davy.ai
Hay algunos problemas posibles con el script de shell que podrían estar causando este problema:
if
está comprobando si$strata
es igual a0
, pero$strata
es en realidad una cadena que contiene tanto la fecha del calendario como el recuento de filas de la consulta. Para extraer solo el recuento de filas, se puede usarawk
para dividir la cadena y recuperar la segunda columna:impala
para ejecutar la consulta de Hive. Asegúrese de que la cadena de conexión y la sintaxis de la consulta sean correctas, y de que el comando devuelva un resultado válido. Se puede probar esto ejecutando directamente el comando en la shell sin el script:Si hay un error con el comando, puede ser necesario solucionar problemas más profundos en función del mensaje de error o revisar los registros de Hive.
mailx
. Asegúrese de que las direcciones de correo electrónico y la línea de asunto sean correctas, y de que el servidor de correo local esté configurado correctamente. Se puede probar esto enviando un correo electrónico de prueba desde la línea de comando usandomailx
:Si el correo electrónico de prueba no llega, puede haber un problema con la configuración del servidor de correo o la configuración del firewall.
En general, puede ser útil agregar algunas instrucciones de depuración al script (por ejemplo,
echo "$strata"
,echo "row_count=$row_count"
) para comprobar los resultados intermedios y encontrar dónde se produce el problema.