【问题标题】:hive and presto,Integer division truncation problemhive 和 presto,整数除法截断问题
【发布时间】:2019-04-04 04:12:41
【问题描述】:

为什么hive中两个bigint类型数据的拆分不会发生整数除法截断,而是发生在presto中

【问题讨论】:

    标签: sql hive presto


    【解决方案1】:

    Presto 机制:

    1. 通过connectors将来自各种数据源的数据加载到Presto JVM中。 (Hive连接器、Mysql连接器等见this)

    2. 使用Java 代码处理(标量函数或聚合函数)数据。

    3. 从 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 
    

    见:Migrating From Hive

    【讨论】:

      【解决方案2】:

      这种方式也可以。 select 1.0 * 1 / 3 from table_name 而不是强制转换值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-15
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 2011-01-26
        相关资源
        最近更新 更多