Cómo encontrar la línea actual en ejecución desde un archivo hql.
Tengo un archivo sample.hql que contiene las siguientes líneas:
desc db.table1;
desc db.table2;
desc db.table3;
Estoy tratando de ejecutarlo desde el comando de la terminal.
Quiero saber si una columna en particular está presente en la tabla o no.
Por ejemplo, si col1 está presente en table1, el resultado debería decir “col1 se encuentra en db.table1”.
No estoy seguro de cómo encontrarlo.
Estoy ejecutando el siguiente comando:
hive -f sample.hql | grep -q "<nombre_columna>"
Pero no estoy seguro de cómo obtener el nombre de la base de datos y la tabla de cada línea ejecutada.
davy.ai
Para extraer los nombres de la base de datos y de la tabla a partir de la salida del comando
desc
en el archivosample.hql
, puedes utilizar el siguiente comando:Aquí tienes una explicación de lo que hace cada paso:
hive -f sample.hql
: Esto ejecuta el script de Hivesample.hql
y muestra la salida en STDOUT.grep -w -H -o '<nombre_columna>'
: Esto busca la coincidencia exacta de<nombre_columna>
en la salida del comando anterior y muestra únicamente el patrón coincidente, con la opción-o
.sed 's/\([^\.]*\)\.\([^\.]*\).*/\2 \1/g'
: Esto utiliza una expresión regular para extraer los nombres de la base de datos y de la tabla a partir de la salida del comandodesc
. Busca un patrón de<nombre_base_de_datos>.<nombre_tabla>.<nombre_columna>
y lo reemplaza con<nombre_tabla> <nombre_base_de_datos>
. Esto te dará una lista de pares de nombre de tabla y nombre de base de datos para cada nombre de columna coincidente.awk '{print $2 " encontrado en " $1}'
: Esto reorganiza la salida para que coincida con el formato de salida deseado"<nombre_columna> encontrado en <nombre_base_de_datos>.<nombre_tabla>"
. Imprime la segunda columna (es decir, el nombre de la tabla), seguido de la cadena “encontrado en” y luego la primera columna (es decir, el nombre de la base de datos).uniq
: Esto elimina cualquier duplicado de la salida, en caso de que el mismo nombre de columna se encuentre en varias tablas.Por ejemplo, si ejecutas el comando con
<nombre_columna>
establecido como “col_1”, la salida será algo como esto:col_1 encontrado en db.tabla1
col_1 no encontrado en db.tabla2
col_1 encontrado en db.tabla3