Saltar al contenido

Cómo establecer variables en scripts de HIVE

Solución:

Necesitas usar el especial hiveconf para sustitución de variables. p.ej

hive> set CURRENT_DATE='2012-09-16';
hive> select * from foo where day >= ${hiveconf:CURRENT_DATE}

de manera similar, puede pasar la línea de comando:

% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql

Tenga en cuenta que hay env y sistema variables también, para que pueda hacer referencia ${env:USER} por ejemplo.

Para ver todas las variables disponibles, desde la línea de comando, ejecute

% hive -e 'set;'

o desde el indicador de la colmena, ejecute

hive> set;

Actualizar:
He empezado a usar colmena también, poniéndolas en fragmentos de hql que puedo incluir desde la CLI de hive usando el source comando (o pase como opción -i desde la línea de comando). El beneficio aquí es que la variable se puede usar con o sin el prefijo hivevar, y permitir algo similar al uso global vs local.

Entonces, asuma que tiene algunos setup.hql que establece una variable de nombre de tabla:

set hivevar:tablename=mytable;

entonces, puedo traer a la colmena:

hive> source /path/to/setup.hql;

y usar en la consulta:

hive> select * from ${tablename}

o

hive> select * from ${hivevar:tablename}

También podría establecer un nombre de tabla “local”, que afectaría el uso de $ {tablename}, pero no $ {hivevar: tablename}

hive> set tablename=newtable;
hive> select * from ${tablename} -- uses 'newtable'

vs

hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'

Probablemente no signifique mucho de la CLI, pero puede tener hql en un archivo que usa fuente, pero establezca algunas de las variables “localmente” para usarlas en el resto del script.

La mayoría de las respuestas aquí han sugerido utilizar hiveconf o hivevar espacio de nombres para almacenar la variable. Y todas esas respuestas son correctas. Sin embargo, hay un espacio de nombres más.

Hay tres en total namespaces disponible para guardar variables.

  1. hiveconf – la colmena comenzó con esto, toda la configuración de la colmena se almacena como parte de esta conf. Inicialmente, la sustitución de variables no formaba parte de Hive y cuando se introdujo, todas las variables definidas por el usuario también se almacenaron como parte de esto. Lo que definitivamente no es una buena idea. Entonces se crearon dos espacios de nombres más.
  2. colmena: Para almacenar variables de usuario
  3. sistema: Para almacenar variables del sistema.

Entonces, si está almacenando una variable como parte de una consulta (es decir, fecha o número de producto), debe usar hivevar espacio de nombres y no hiveconf espacio de nombres.

Y así es como funciona.

hiveconf sigue siendo el espacio de nombre predeterminado, por lo que si no proporciona ningún espacio de nombres, almacenará su variable en el espacio de nombres de hiveconf.

Sin embargo, cuando se trata de referir una variable, no es cierto. Por defecto se refiere a colmena espacio de nombres. Confuso, ¿verdad? Puede resultar más claro con el siguiente ejemplo.

Si lo haces no proporcionar espacio de nombres como se menciona a continuación, variable var será almacenado en hiveconf espacio de nombres.

set var="default_namespace";

Entonces, para acceder a esto, Necesito especificar hiveconf espacio de nombres

select ${hiveconf:var};

Y si tu no proporcione espacio de nombres le dará un error como se menciona a continuación, por lo que, de forma predeterminada, si intenta acceder a una variable, se registra hivevar espacio de nombres solamente. Y en hivevar no hay una variable nombrada var

select ${var}; 

Hemos proporcionado explícitamente hivevar espacio de nombres

set hivevar:var="hivevar_namespace";

ya que estamos proporcionando el espacio de nombres, esto funcionará.

select ${hivevar:var}; 

Y, de forma predeterminada, el espacio de trabajo que se utiliza al referir una variable es hivevar, lo siguiente también funcionará.

select ${var};

¿Ha intentado utilizar el signo de dólar y soportes como esto:

SELECT * 
FROM foo 
WHERE day >= '${CURRENT_DATE}';
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *