Estoy buscando el equivalente SQL de SET varname = valueen Hive QL
Sé que puedo hacer algo como esto:
SET CURRENT_DATE = '2012-09-16';
SELECT * FROM foo WHERE day >= @CURRENT_DATE
Pero luego me sale este error:
el carácter '@' no se admite aquí

Respuestas:
Necesita usar el hiveconf especial para la sustitución de variables. p.ej
de manera similar, puede pasar la línea de comando:
Tenga en cuenta que también hay variables env y system , por lo que puede hacer referencia,
${env:USER}por ejemplo,.Para ver todas las variables disponibles, desde la línea de comando, ejecute
o desde el indicador de colmena, ejecute
Actualización: también comencé a usar variables de hivevar , poniéndolas en fragmentos de hql que puedo incluir desde la CLI de hive usando el
sourcecomando (o pasar 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, suponga que tiene setup.hql que establece una variable de nombre de tabla:
entonces, puedo traer a la colmena:
y usar en la consulta:
o
También podría establecer un nombre de tabla "local", que afectaría el uso de $ {nombre de tabla}, pero no $ {hivevar: nombre de tabla}
vs
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 usar en el resto del script.
fuente
set CURRENT_DATE='2012-09-16';, puede consultarlo más tarde con${hiveconf:CURRENT_DATE}FAILED: ParseException line x:y cannot recognize input near '$' '{' 'hiveconf' in expression specificationLa mayoría de las respuestas aquí han sugerido usar
hiveconfo elhivevarespacio de nombres para almacenar la variable. Y todas esas respuestas son correctas. Sin embargo, hay un espacio de nombres más.Hay un total de tres
namespacesdisponibles para mantener variables.Entonces, si está almacenando una variable como parte de una consulta (es decir, fecha o número de producto), debe usar el
hivevarespacio de nombres y no elhiveconfespacio de nombres.Y así es como funciona.
hiveconf sigue siendo el espacio de nombres predeterminado , por lo que si no proporciona ningún espacio de nombres, almacenará su variable en el espacio de nombres hiveconf.
Sin embargo, cuando se trata de referir una variable, no es cierto. De forma predeterminada, se refiere al espacio de nombres hivevar . Confuso, ¿verdad? Puede resultar más claro con el siguiente ejemplo.
Si no proporciona el espacio de nombres como se menciona a continuación, la variable
varse almacenará en elhiveconfespacio de nombres.Entonces, para acceder a esto, debe especificar el
hiveconfespacio de nombresY si no proporciona un 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, solo verifica el
hivevarespacio de nombres. Yhivevarno hay una variable nombradavarHemos proporcionado explícitamente un
hivevarespacio de nombresya que estamos proporcionando el espacio de nombres, esto funcionará.
Y de forma predeterminada, el espacio de trabajo utilizado durante la referencia de una variable es
hivevarel siguiente también funcionará.fuente
¿Ha intentado usar el signo de dólar y corchetes como este?
fuente
Dos formas sencillas:
Usando Hive Conf
Usando vars de colmena
En su CLI, configure vars y luego utilícelas en Hive
Documentación: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
fuente
Una cosa a tener en cuenta es establecer cadenas y luego referirse a ellas. Debe asegurarse de que las comillas no colisionen.
Al establecer fechas, refiérase a ellas en el código ya que las cadenas pueden entrar en conflicto. Esto no funcionaría con la fecha de inicio establecida anteriormente.
Debemos tener cuidado de no establecer dos comillas simples o dobles para las cadenas cuando se hace referencia a ellas en la consulta.
fuente
En caso de que alguien necesite parametrizar la consulta de colmena a través de cli.
Por ejemplo:
hive_query.sql
Ahora ejecute el archivo sql anterior desde cli:
fuente
Prueba este método:
funciona bien en mi plataforma.
fuente
Puede exportar la variable en el script de shell export CURRENT_DATE = "2012-09-16"
Luego, en hiveql te gusta SELECT * FROM foo WHERE day> = '$ {env: CURRENT_DATE}'
fuente
Puede almacenar la salida de otra consulta en una variable y luego puede usar la misma en su código:
fuente