Задайте променлива Hive с изхода на UDF

Опитвам се да задам променлива Hive с изхода на UDF функция, така че мога да използвам тази стойност в INSERT INTO myTable по-късно в моя .hql скрипт.

Това е DDL на myTable:

CREATE TABLE myTable(
CreationTimestamp TIMESTAMP,
Tablename CHAR(50),
LastExtractedTimestamp TIMESTAMP,
OozieJobID CHAR(40) 
);

Следното не работи:

set hiveconf:ct=select current_timestamp;   
INSERT INTO mytable VALUES ('${hiveconf:ct}','test','2015-12-11 11:25:03.341','testID');

а също и този не работи (без кавички):

set hiveconf:ct=select current_timestamp;   
INSERT INTO myTable VALUES (${hiveconf:ct}, 'test','2015-12-11 11:25:03.341','testID');

Резултатът е, че получавам вмъкнат ред в моята таблица с нулева стойност на мястото на стойността на моята променлива:

нулев тест 2015-12-11 11:25:03.341 testID

Така че в момента използвам следното решение:

INSERT INTO myTable select * from (select current_timestamp, 'test','2015-12-11 11:25:03.341','testID') as dummy;

Имате ли някакво предложение или по-добър начин да постигнете това?

Благодаря ;-)


person AxA    schedule 11.12.2015    source източник
comment
Не съм сигурен дали можете да използвате UDF извън заявка за Hive. Може би можете, но никога не съм го срещал. Като се има предвид, че изпълнявате .hql скрипт, защо не изпълните команда на обвивката и вместо това да изпълните това? ! <command> го прави - вижте сайтове .google.com/site/hadoopandhive/home/ за основен пример.   -  person Ben Watson    schedule 11.12.2015
comment
Благодаря, Бент, вероятно ще запазя заобиколното решение засега, но ще опитам опцията shell и ще видя колко време отнема изпълнението   -  person AxA    schedule 14.12.2015


Отговори (1)


Това не е възможно. Защо ? Променливите Hive се вмъкват в заявката, когато изпратите заявката и заявката се анализира, така че преди UDF дори има шанс изобщо да се изпълни. Обмислете използването на нещо като oozie, за да можете действително да изградите модулен работен процес.

person Roberto Congiu    schedule 14.12.2015