Улей: диапазон дат не выбирает данные из таблицы - PullRequest
3 голосов
/ 06 июня 2019

Я новичок в этой платформе.Пытается выполнить задачу в Hive, но не может ее выполнить.

Создайте таблицу со следующей структурой:

Table1:

ID DATE       VAL1  VAL2  VAL3
01 12/12/2017 12.23 56.45 78.9
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
05 03/16/2018 87.45 45.56 89.89
06 06/06/2018 67.66 45.00 67.90
07 01/01/2018 23.21 90.99 56.33
08 07/03/2018 67.22 67.22 33.11
09 05/13/2017 12.12 98.33 78.89

DataTypes:

ID   INT
DATE STRING
VAL1 DOUBLE
VAL2 DOUBLE
VAL3 DOUBLE

Hive Query:

SELECT * FROM Table1 WHERE DATE BETWEEN date_format(current_date + 
interval '-12' month,'MM/dd/YYYY') AND 
date_format(current_date,'MM/dd/YYYY');

Этот запрос не извлекает записи из таблицы.

Actual O/P:

OK
Time taken: 65.515 seconds
hive>

Expected O/P:

ID DATE       VAL1  VAL2  VAL3
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
06 06/06/2018 67.66 45.00 67.90
08 07/03/2018 67.22 67.22 33.11

Любая помощь, чтобы указать на ошибку или пропущенную часть в запросе, будет действительно полезна.Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Используемый вами формат неверен. Правильный формат 'MM/dd/yyyy', а не 'MM/dd/YYYY'. Ваша дата не в формате сортировки, поэтому вам нужно преобразовать дату столбца в формат сортировки 'yyyy-MM-dd' перед применением фильтра BETWEEN:

SELECT * 
  FROM Table1 
 WHERE from_unixtime(unix_timestamp(`DATE`,'MM/dd/yyyy'),'yyyy-MM-dd') BETWEEN add_months(current_date,-12) AND current_date;

Для лучшего понимания рассмотрим этот пример при сравнении двух дат в несортируемом формате:

hive> select '09/19/2018' > '08/01/2019'; --bad data format
OK
true
Time taken: 5.632 seconds, Fetched: 1 row(s)

Вот почему оператор BETWEEN будет некорректно работать с такими датами.

Давайте сравним те же даты в правильном формате:

hive> select '2018-09-19' > '2019-08-01';
OK
false
Time taken: 0.095 seconds, Fetched: 1 row(s)

Также см. SimpleDateFormat документы класса в качестве ссылки на шаблон формата.

0 голосов
/ 06 июня 2019

Сначала обновите тип данных в столбце [Date], указав DATE or DATETIME в своей таблице.затем выполните этот запрос

SELECT * FROM Table1 WHERE DATE BETWEEN Fromdate AND Todate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...