Ошибка при преобразовании MySQL в HiveQL, включая DATE_SUB и ИНТЕРВАЛ

#mysql #hive #hiveql

#mysql #улей #hiveql

Вопрос:

Я пытаюсь преобразовать запрос, написанный на MySQL, в HiveQL. Часть запроса, выдающая мне ошибку, является :

  WHERE 1 = 1
 AND table1.incoming_date >= DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) - 1 DAY),INTERVAL 3 MONTH)
  

Скорее всего, это потому, что INTERVAL не поддерживается в Hive с DATE_SUB().
Итак, может ли кто-нибудь преобразовать эту часть для меня.

Ошибка:

 ParseException: 
extraneous input 'DAY' expecting {')', ','}(line 179, pos 60)
  

Комментарии:

1. Пожалуйста, всегда показывайте нам ошибки

2. Включена ошибка

3. пожалуйста, версию hive?

4. PySpark 3.0.0 использует его внутри spark.sql

Ответ №1:

Возможно, вы можете сделать это, используя комбинацию функций даты Hive date_sub и add_months .

 beeline> select current_date today, add_months(date_sub(current_date,1),-3) past_date;
INFO  : OK
 ------------ ----------- 
|   today    | past_date |
 ------------ -----------|
| 2020-08-13 | 2020-5-12 |
 ------------ -----------|
1 row selected (0.101 seconds)