Tengo una preocupación que se pueden clasificar en 2 formas:
Mi requisito es de pasar argumento de la secuencia de comandos de shell a la colmena de secuencia de comandos.
O
dentro de un shell script, se debe incluir el valor de la variable en la declaración de la colmena.

Voy a explicar con un ejemplo para ambos:

1), Pasando por el argumento de la secuencia de comandos de shell para hiveQL->

My test Hive QL:
select count(*) from demodb.demo_table limit ${hiveconf:num}

Mi prueba de secuencia de comandos de shell:

cnt=1
sh -c 'hive -hiveconf num=$cnt -f countTable.hql'

Así que, básicamente, quiero incluir el valor de ‘cnt’ en el HQL, lo que no está sucediendo en este caso. Obtengo el error como:

FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause

Estoy seguro de que el error significa que el valor de la variable no está siendo transmitido.

2), Pasando por el argumento directamente dentro de la secuencia de comandos de shell->

cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'

En ambos casos, yo no podía dejar pasar el valor del argumento. Alguna idea??

PS: sé que la consulta parece absurdo de lo que incluye el «límite» en el recuento, pero me han reformulado el problema, de hecho tengo. El requisito permanece intacta de pasar el argumento.

Cualquier ideas a nadie?

Gracias de antemano.

puedes hacer eco en el segundo caso y ver lo que usted está consiguiendo: echo ‘select count(*) from demodb.demo_table límite de $cnt’
El uso de comillas simples suprime la expansión.

OriginalEl autor knowone | 2015-06-02

4 Comentarios

  1. 7

    Establecer la variable de esta forma:

    #!/bin/bash
    cnt=3
    echo "Executing the hive query - starts"
    hive -hiveconf num=$cnt -e ' set num; select * from demodb.demo_table limit ${hiveconf:num}'
    echo "Executing the hive query - ends"
    num="$cnt", si desea que la respuesta más genérica (capaz de pasar a cosas que no son sólo números y puede contener espacios en blanco, glob personajes, etc).
    Gracias pais, este es perfecto. Yo nunca he usado varias opciones para la colmena desde la línea de comandos. Totalmente de acuerdo con Charles, comillas simples, se suprime la información.
    para ser más precisos, se puede utilizar hivevar de espacio de nombre en lugar de hiveconf de espacio de nombre. Sin embargo, ambos trabajan para su consulta.

    OriginalEl autor sras

  2. 2

    Funciona esto, si se ponen en un archivo llamado hivetest.sh, luego se invoca con sh hivetest.sh:

    cnt=2
    hive -e "select * from demodb.demo_table limit $cnt"

    Usted está usando comillas simples en lugar de la doble.
    El uso de comillas dobles para la OPCIÓN #1, también funciona bien.

    OriginalEl autor Madhu

  3. 0

    Probar este

    cnt=1

    hive -hiveconf number=$cnt select * from demodb.demo_table limit ${hiveconf:number}

    OriginalEl autor Aman

Dejar respuesta

Please enter your comment!
Please enter your name here