У Hive есть что-то эквивалентное DUAL? - PullRequest
18 голосов
/ 21 марта 2012

Я хотел бы запустить операторы вроде

SELECT date_add('2008-12-31', 1) FROM DUAL

Есть ли в Hive (работающем на Amazon EMR) нечто подобное?

Ответы [ 6 ]

22 голосов
/ 24 апреля 2015

Лучшее решение - не упоминать имя таблицы.

select 1+1;

Дает результат 2. Но бедному Улью нужно уменьшать карту, чтобы найти это!

10 голосов
/ 21 марта 2012
5 голосов
/ 21 июля 2015

Чтобы создать двойную таблицу в улье, где есть один столбец и одна строка, вы можете сделать следующее:

create table dual (x int);
insert into table dual select count(*)+1 as x from dual;

Проверка выражения:

select split('3,2,1','\\,') as my_new_array from dual;

Выход:

["3","2","1"]
5 голосов
/ 24 июля 2013

В ссылке доступно хорошее рабочее решение (хорошо, обходной путь), но оно медленное, как вы можете себе представить.

Идея состоит в том, что вы создаете таблицу с фиктивным полем, создаете текстовый файл, содержимое которого просто 'X', загружаете этот текст в эту таблицу. Виола.

CREATE TABLE dual (dummy STRING);

load data local inpath '/path/to/textfile/dual.txt' overwrite into table dual;

SELECT date_add('2008-12-31', 1) from dual;
2 голосов
/ 26 апреля 2016

Быстрое решение:

Мы можем использовать существующую таблицу для достижения двойной функциональности с помощью следующего запроса.

SELECT date_add('2008-12-31', 1) FROM <Any Existing Table> LIMIT 1

Например:

SELECT CONCAT('kbdjj','56454') AS a, null AS b FROM tbl_name LIMIT 1

Результат

«предел 1» в запросе используется, чтобы избежать многократного появления указанных значений (kbdjj56454, null).

0 голосов
/ 19 февраля 2019

Hive теперь поддерживает эту функцию, а также поддерживает многие другие функции дат.

Вы можете выполнить запрос, как показано ниже, в кусте, который добавит дни в указанную дату в первом аргументе.

SELECT DATE_ADD('2019-03-01', 5);

Функции даты улья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...