2016-11-01 4 views
2

Когда я бегу Hive запросов в Спарк SQL, LHS (timestamp) <=RHS (date) для такого же значения '2013-09-30'не лечится, как равный. В то время как CAST от TIMESTAMP в RHS работает хорошо.Hive/SparkSQL - Тип Принуждение с даты, временной метки в выражении

> SELECT CASE 
      WHEN CAST(ADD_MONTHS(CAST('2013-09-30' AS DATE), +1) AS TIMESTAMP) <= ADD_MONTHS(CAST('2013-09-30' AS DATE), +1) 
      THEN 'less than or equal' 
      ELSE 'greater' 
     END AS TIMESTAMP_LTE_DATE 
FROM 
VALUES(1); 
+---------------------+--+ 
| TIMESTAMP_LTE_DATE | 
+---------------------+--+ 
| greater    | 
+---------------------+--+ 

У нас есть так много выражений с DATE и TIMESTAMP комбинацией более над всеми запросы будут генерировать динамически. Таким образом, трудно найти и CAST столбцы или значения во всех местах.

Есть ли способ автоматического преобразования RHS/LHS в выражение в более высокий тип данных (Тип Принуждение) в Hive/SparkSQL?

Пробовал аналогичный запрос в Oracle 11g, и он отлично работает, который идет до equal.

Цените свою помощь!

+0

Новые ответы с решениями diff (если искра разрешает следующую версию)/hack всегда приветствуется. – mrsrinivas

ответ

2

К сожалению type coercion rules for TimestampType/DateType сравнения жестко и преобразовать обе стороны StringType:

// Comparisons between dates and timestamps. 
case p @ BinaryComparison(left @ TimestampType(), right @ DateType()) => 
    p.makeCopy(Array(Cast(left, StringType), Cast(right, StringType))) 
case p @ BinaryComparison(left @ DateType(), right @ TimestampType()) => 
    p.makeCopy(Array(Cast(left, StringType), Cast(right, StringType))) 

и лексикографической дата заказа даты представления представление идет перед представлением временной метки для той же даты.

 Смежные вопросы

  • Нет связанных вопросов^_^