zoukankan      html  css  js  c++  java
  • Hive: Reflect UDF

    Reflect UDF

    JAVA类和方法通常用于处理用户希望在hive中使用的确切的函数。相比与封装一个UDF然后调用这个方法,这些
    方法主要通过反射UDF去调用。Reflect使用Java反射去实例化,
      并且调用对象的方法;也能够调用静态方法。这个方法必须返回一个基础类或者一个hive能序列化的类。
     
      SELECT reflect("java.lang.String", "valueOf", 1),
           reflect("java.lang.String", "isEmpty"),
           reflect("java.lang.Math", "max", 2, 3),
           reflect("java.lang.Math", "min", 2, 3),
           reflect("java.lang.Math", "round", 2.5),
           reflect("java.lang.Math", "exp", 1.0),
           reflect("java.lang.Math", "floor", 1.9)
      FROM src LIMIT 1;
      结果:
      1   true    3   2   3   2.7182818284590455  1.0
     
      注意:
        1. 0.9.0采用了java_method()
        2. Reflect UDF是不确定返回值的。它不能保证在给予相同的参数时,返回值。因此小心在where子句中使用,因为会使谓词下推失败

    谓词下推

    谓词下推的基本思想:尽可能早的处理表达式(expressions),默认产生的执行计划在看到数据的地方添加过滤
    器filter,但是有些情况过滤filter表达式expressions被推到离第一次看到数据的操作operator更近。
    如,select a.*, b.* from a join b on (a.col1 = b.col1) where a.col1 > 20 and b.col2 > 40(个人理解,where后面的句子为谓词,)
    当没有谓词下推时,执行的顺序是
    a join b , 然后再 filter 
    使用谓词下推时,执行的顺序是
    a b 先进行过滤,然后再进行 join操作
    开启谓词下推功能 
    set hive.optimize.ppd=true

    参考官方文档:https://cwiki.apache.org/confluence/display/Hive/ReflectUDF

  • 相关阅读:
    bash 常用操作
    阿里云专有网络与弹性公网IP
    Excel 中 Index 和 Match 方法的使用
    分割excel sheet
    vba 工作案例-sheet间拷贝内容
    趣味题:重男轻女的村庄
    vba 工作案例1
    wordpress 导航相关的函数
    怎么样打印加密PDF文件
    excel 2013 图表制作
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/13441689.html
Copyright © 2011-2022 走看看