函数使用基础

数据&建表

[whg@cdh01 hive]$ cat salary 
1001    100.0   ABC
1001    150.0   BCD
1001    200.0   CDE
1001    150.0   DEF
1002    200.0   ABC
1002    200.0   ABC
1002    100.0   BCD
1002    300.0   CDE
1002    50.0    DEF
1002    400.0   EFG
1003    100.0   ABC
1003    50.0    BCD
1004    60.0    ABC
--建测试表
CREATE table IF NOT EXISTS test02.salary 
 ( id String COMMENT '员工编号'
 ,salary String COMMENT '工资' 
,type String )
 row FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
stored AS TEXTFILE
--加载数据
load data inpath '/user/whg/data/salary' overwrite into table test02.salary 

or & and 优先级问题

在where条件语句中 and的优先级要高于or的,所以必要时要加( ) 来规定计算顺序

-- 如
SELECT id,salary from test02.salary where  (id='1001' or id='1002' )and salary=100 ;

cast( )

cast是用来进行类型转换的
格式为cast( id as String)

SELECT  cast(1.5 as INT) as num FROM salary;

if(con,' ',' ')

if(BOOLEAN testCondition, T valueTrue, T valueFalseOrNull)
Returns valueTrue when testCondition is true, returns valueFalseOrNull otherwise.

SELECT if(2>1,'ture','false') FROM salary LIMIT 2;

case when ... then ... when ... then ... else ... end

用于select后边,作用是根据不同的条件来筛选相应结果
注意:when后边是条件,then后边是满足该条件返回的结果,且不同then返回的结果类型需保持一致

select case when id='1001' then 'num1' 
when id='1002' then 'num2'  else  ' num_other' end from salary;
--id为1001返回num1 id为1002 返回num2 其他id返回num_other

get_json_object(String json_string,String json_path)

第一个参数是json对象的字段名或json字符串,第二个参数是需要提取的json对象格式为$.json_key 如果是数组的话就用[1] 如果输入的jsonkey值无效,那么就会返回null
每次只能返回一个数据项
在技术对app进行埋点时,会将多个字段存放在一个数组中,因此调用数据时,要对埋点数据进行解析,以作进一步的清洗

SELECT get_json_object
('{"name":"Morgan","age":"18","score":{"math":"90","English":"80"}}',"$.score.English"); 

parse_url

parse_url(STRING urlString, STRING partToExtract [, STRING keyToExtract])
可解析url字段,清洗出想要的信息
Returns the specified part from the URL. Valid values for partToExtract include HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO

SELECT parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'PROTOCOL') 

SELECT parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1') 
--return k1 

concat()

字符串连接 或者是数字连接,对类型没有规定

select *
  from log a
  left outer join users b
  on case when a.user_id is null then concat(‘hive’,rand() ) else a.user_id end = b.user_id;

concat_ws()
concat升级版,可以将数组元素和字符串之间用规定的分隔符连接并输出
注意:数组必须是字符串数组

SELECT concat_ws("-",array("1","2"))

SELECT concat_ws("-",type,cast(rand(10) as String)) FROM salary 

collect_set() collect_list()
collect_set()可对括号内的字段下元素去重输出
collect_list()可全部输出
输出的都是数组

select collect_set(id) as id from salary;
select collect_list(id ) as id from salary;

聚合运算

count(1) count(*) count(row_name)

count(*):所有行进行统计,包括NULL行
count(1):所有行进行统计,包括NULL行
count(column):对column中非Null进行统计

sum(row_name)

时间类函数

date_add(DATE startdate, INT days)

Adds a number of days to startdate: date_add('2008-12-31', 1) = '2009-01-01'. T = pre 2.1.0: STRING, 2.1.0 on: DATE

date_format(DATE|TIMESTAMP|STRING ts, STRING fmt)

Converts a date/timestamp/string to a value of string in the format specified by the date format fmt (as of Hive 1.2.0). Supported formats are Java SimpleDateFormat formats – https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html. The second argument fmt should be constant. Example: date_format('2015-04-08', 'y') = '2015'.

date_sub(DATE startdate, INT days)

Subtracts a number of days to startdate: date_sub('2008-12-31', 1) = '2008-12-30'. T = pre 2.1.0: STRING, 2.1.0 on: DATE

datediff(STRING enddate, STRING startdate)

Returns the number of days from startdate to enddate: datediff('2009-03-01', '2009-02-27') = 2.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,431评论 0 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,700评论 0 38
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,266评论 0 10
  • 创建了一个服务,需要操作集群,默认权限无法操作。 RBAC deployment
    getsu阅读 3,389评论 1 2
  • 我在公园的凉亭下,不远处有些老人在唱歌,大功放,是梅艳芳的《女人花》。 现在的时节,实在是出去游玩的好时光,待在学...
    FutureToken阅读 437评论 0 1