Hive(四)hive函數與hive shell

來源:互聯網
上載者:User

標籤:print   display   form   樣本   last   create   bsp   查詢   min   

一、hive函數

    

     1、hive內建函數

        (1)內容較多,見《 Hive 官方文檔》
            https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
        (2)詳細解釋:
            http://blog.sina.com.cn/s/blog_83bb57b70101lhmk.html

         (3) 測試內建函數的捷徑:

                 1、建立一個 dual 表 create table dual(id string);
                  2、 load 一個檔案(一行,一個空格)到 dual 表
                  3、 select substr(‘huangbo‘,2,3) from dual;

          (4)查看內建函數  show  functions;

                 顯示函數的詳細資料 desc function abs;

                  顯示函數的擴充資訊  desc function extended concat;

           (5)詳細使用見文檔

    2、hive自訂函數

當 Hive 提供的內建函數無法滿足你的業務處理需要時,此時就可以考慮使用使用者自訂函 數
UDF ( user-defined function)作用於單個資料行,產生一個資料行作為輸出。(數學函數, 字串函數)
UDAF(使用者定義聚集合函式 User- Defined Aggregation Funcation):接收多個輸入資料行,併產 生一個輸出資料行。( count, max)

    3、一個簡單的UDF函數樣本:

         (1)先開發一個簡單的 java 類,繼承 org.apache.hadoop.hive.ql.exec.UDF,重載 evaluate 方法

        (2)打成jar包上傳到伺服器

         (3) 將 jar 包添加到 hive 的 classpath

                hive>add JAR /root/hivejar /udf.jar;

         (4)建立臨時函數與開發好的 class 關聯起來

 Hive>create temporary function tolowercase as ‘ com.mazh.udf. ToLowerCase ‘;

          (5)至此,便可以在 hql 在使用自訂的函數

select tolowercase(name),age from studentss;

      4、Transform實現   (把json資料中timeStamp欄位變成日期編號)

Hive 的 TRANSFORM 關鍵字提供了在 SQL 中調用自寫指令碼的功能。適合實現 Hive 中沒有的 功能又不想寫 UDF 的情況
具體以一個執行個體講解。     

(1)先載入 rating.json 檔案到 hive 的一個原始表 rat_json
create table rat_json(line string) row format delimited;
load data local inpath ‘/root/rating.json‘ into table rat_json;
(2) 建立 rate 這張表用來儲存解析 json 出來的欄位:
create table rate(movie int, rate int, unixtime int, userid int) row format delimited fields
terminated by ‘\t‘;
解析 json,得到結果之後存入 rate 表:
insert into table rate select get_json_object(line,‘$.movie‘) as moive,get_json_object(line,‘$.rate‘)
as rate,get_json_object(line,‘$.timeStamp‘) as unixtime,get_json_object(line,‘$.uid‘) as userid
from rat_json;
(3)使用 transform+python 的方式去轉換 unixtime 為 weekday
先編輯一個 python 指令檔

vi weekday_mapper.py

#!/bin/python
import sys
import datetime
for line in sys.stdin:
line = line.strip()
movie,rate,unixtime,userid = line.split(‘\t‘)
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print ‘\t‘.join([movie, rate, str(weekday),userid])

儲存檔案
然後,將檔案加入 hive 的 classpath:

最後查詢看資料是否正確:
select distinct(weekday) from lastjsontable;

二、Hive  Shell  操作

 

Hive(四)hive函數與hive shell

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.