当我在Spark SQL中运行Hive查询时, LHS ( timestamp
) <=
RHS ( date
)为相同的值 '2013-09-30'
is not treating as equal . 而RHS中 TIMESTAMP
的 CAST
效果很好 .
> 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
列或值 .
有没有办法在Hive / SparkSQL中自动将表达式中的RHS / LHS转换为更高的数据类型( Type Coercion )?
在Oracle 11g中尝试了类似的查询,它工作正常_11505160_ .
感谢您的帮助!!
1 回答
不幸的是,type coercion rules for TimestampType / DateType比较是硬编码的,并将双方转换为
StringType
:并且使用词典排序日期表示日期表示在同一日期的时间戳表示之前 .