【发布时间】:2019-04-04 04:12:41
【问题描述】:
为什么hive中两个bigint类型数据的拆分不会发生整数除法截断,而是发生在presto中
【问题讨论】:
为什么hive中两个bigint类型数据的拆分不会发生整数除法截断,而是发生在presto中
【问题讨论】:
Presto 机制:
通过connectors将来自各种数据源的数据加载到Presto JVM中。 (Hive连接器、Mysql连接器等见this)
使用Java 代码处理(标量函数或聚合函数)数据。
从 JVM(或磁盘,如果启用 spill)输出结果。
在 Java 中 1/2=0 因此 Presto 将是相同的。在 Hive 中,我认为是因为 UDF,例如 overrive operator: LanguageManual+UDF
为了避免截断,只需要'Thinking in Java':
int a = 1
int b = 2
c = 1.0*a/b
在 Presto SQL 中
-- result: 0.3333333333333333
select cast(1 as double) / 3 from table_name
【讨论】:
这种方式也可以。 select 1.0 * 1 / 3 from table_name 而不是强制转换值
【讨论】: