1. 程式人生 > >Hive 內建函式和UDF函式

Hive 內建函式和UDF函式

1)內建函式

    hive> show functions;    // 顯示所有函式,比官網詳細

    hive> desc function substr;    // 檢視函式的詳細資訊

    hive> desc function extended substr;    // 檢視函式的更詳細資訊,包括語法(substr的pos從1開始,<0是從尾開始)

2)UDF函式介紹    User-Defined Functions (UDFs)

    built-in 的函式滿足不了我們的業務需求,需要自己開發函式去實現

    2.1 UDF (工作常用)

        one2one    一條資料進來,一條資料出去    如:concat/lower

    2.2 UDAF

        A是聚合,即many2one    如:count/max......(聚合函式)

    2.3 UDTF(基本用不到)

        T是table,即one2many    一條資料進來,多條資料出去    如:lateral view explode

    Q:在傳統的db2/oracle ==> 雲化(Hadoop,即:用大資料處理),怎樣實現?

    A:首先要保持sql不變,然後根據該sql再在hive上面實現,這樣就得使用UDF函數了。


3)開發UDF

    1. 繼承UDF類

    2. 重寫evaluate方法

        建議: -- 要有返回值

                  -- 引數型別使用Hadoop的型別(只是建議,用java型別也不會錯)

    3. 打成jar包

    4. 新增到hive中 hive> add jar /home/hadoop/lib/hive-1.0.jar;

    5. 建立(臨時)函式 hive> create (temporary) function say_hello as 'com.ruozedata.udf.HelloUDF';

    6. 建立持久函式 
        hive> CREATE FUNCTION say_hello2 AS 'com.ruozedata.udf.HelloUDF' 
                   USING JAR 'hdfs://hadoop000:8020/lib/hive-1.0.jar';

    7. 通過hive> list jars; 可以查詢到加了哪些jar包進來

4)注意

    自定義UDF,在show functions;命令下可能會沒有顯示到自定義的持久函式,但可以通過以下方法查詢:

        mysql> select * from FUNCS \G;