Parámetros en las consultas de Hive. Ejemplo con fechas

18 May

Soy cinturón blanco de Hive pero aprovecho el blog para mostraros como he añadido unas variables a mi consulta de Hive, en realidad espero que algún alma caritativa me indique alguna forma más elegante. Necesito que mis consultas vayan parametrizadas por fechas que hacen mención a particiones de la tabla, estas particiones no son variables fecha, son string con el formato YYYYMMDD así que es necesario transformar las variables para realizar operaciones con ellas. En este caso tengo una fecha inicio y quiero irme tres meses hacia atrás:

[sourcecode language=»sql»]
set inicio="20161231";
set f_aux = add_months(from_unixtime(unix_timestamp({hiveconf:inicio} ,’yyyyMMdd’), ‘yyyy-MM-dd’),-3);
set f_mes_menos3 = from_unixtime(unix_timestamp(
{hiveconf:f_aux} ,’yyyy-MM-dd’), ‘yyyyMMdd’);
[/sourcecode]

Con set defino las variables de mi entorno a las que yo referencio como ${hiveconf:variable}, desconozco si hay otra forma mejor de hacerlo y transformo de caracter a fecha con from_unixtime + unix_timestamp para así poder usar la función add_months que no me funcionaba con string. Después deshago el cambio y ya tengo otra variable a partir de la primera, puedo automatizar mis parámetros. ¿Lo estoy haciendo bien?

3 respuestas a «Parámetros en las consultas de Hive. Ejemplo con fechas»

  1. Hola Raúl,

    Aprovecho tu interesante entrada en Hive para lanzarte una pregunta que realmente es de SAS y de regresiones logísticas. Se que conoces ambos temas por tus post y en eso eres casi cinturón negro. Bueno, the question:
    Estoy creando un modelo de regresión logistica con SAS con el famoso
    proc logistic. Todas las vars de input que incluyo en el modelo han sido validadas
    previamente para comprobar que la variable de target tiene dependencia con ellas.

    En mi exploración previa me encuentro una fuerte correlación (0.9) entre 2 vars de input. A saber: rango_ant y rango_edad. Creo que esto se llama «multicolinealidad»,
    ¿correcto?

    Pues que no sé como tratarla…¿quito una de las vars de mi modelo?
    Este es mi modelo:

    proc logistic data=test outmodel=modelo1 plots(only)=roc;
    class cod_posicion nivel_sal rango_edad rango_ant rango_eval;
    model baja = rango_edad rango_ant nivel_sal rango_eval cod_posicion ;
    quit;

    ¿Utilizo efectos cruzados añadiendo una var que sea multiplicación de las dos?

    proc logistic data=test outmodel=modelo1 plots(only)=roc;
    class cod_posicion nivel_sal rango_edad rango_ant rango_eval;
    model baja = rango_edad rango_ant nivel_sal rango_eval cod_posicion rango_edad*rango_ant ;
    quit;

    Te agradezco cualquier orientación porque ando perdidillo…

    Muchas gracias,

    • Hola, tu caso es un buen ejemplo para aplicar mixturas de modelos, es decir, hacer dos modelos y después aplicar la media de las probabilidades obtenidas. Las dos variables no pueden aparecer en el modelo porque son «la misma» o eliminas una o eliminas otra, pero puede ser interesante que aparezcan las dos entonces haces un modelo con una y el resto de las variables y otro modelo con la otra y el resto de las variables y luego haces prob_modelo1+prob_modelo2/2 Esta cosa tan simple hace que se mejore la capacidad predictiva. Puébalo

Deja una respuesta

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