Hive简易教程 - 数据分析

Hive是一个HDFS上的sql执行引擎,它将sql语句转化为Hadoop上的map-reduce任务来执行。由于是写sql,所以使用Hive进行数据分析的好处是没有什么额外的学习成本,但是它是批量式处理的,可能会比较慢。本文将通过几个案例来简单介绍如何使用Hive。

样例数据

** 随机生成一批订单数据(order_id, price, tag, order_date) **

from random import randint
from datetime import date
from datetime import timedelta

for i in range(1000):
    order_id = 'order_%s' % i
    seller_id = 'seller_%s' % randint(0, 300)
    price = randint(0, 100000) / 100.0
    tag = randint(0, 1)
    order_date = date.today() - timedelta(days=randint(0, 30))
    print order_id, seller_id, price, tag, order_date

** 存储数据到Hive **

hive> create table test_order_sample
(order_id string, seller_id string, price double, tag int, order_date string) 
row format delimited fields terminated by ' ';

hive> load data 
local inpath '/data/order_sample' 
into table test_order_sample;

案例一

** 统计出近一周每天成功支付的订单总数,gmv,客单价 **

hive> select order_date,count(*),round(sum(price),2),round(avg(price),2) 
from test_order_sample 
where tag=1 
and order_date>=date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) 
group by order_date 
order by order_date desc;

案例二

** 统计出近一周每天成功支付 及支付失败 各自的订单总数,gmv,客单价 **

select order_date,
sum(if(tag=0,1,0)),sum(if(tag=0,price,0)),avg(if(tag=0,price,0)),
sum(if(tag=1,1,0)),sum(if(tag=1,price,0)),avg(if(tag=1,price,0)) 
from test_order_sample 
where tag=1 
and order_date>=date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) 
group by order_date 
order by order_date desc;

count函数和if条件组合,而不是两个sql join

案例三

** 挑选出近一周gmv>1000并且订单量>2单的卖家ID及其订单 **

hive> select seller_id,collect_set(order_id) 
from test_order_sample 
where tag=1 
and order_date>=date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) 
group by seller_id 
having count(*)>2 
and sum(price)>1000;

常用UDF

聚合相关函数

collect_set(c_1)

  在使用group by之后只能select出group key以及相关的统计数字,但也可以以集合的形式select出任何其他的非group key,比如按卖家ID聚合之后又想查看在这个卖家下单的买家ID:sellect collect_set(buyer_id) from t group by seller_id。

collect_list(c_1)

  与collect_set类似,元素可重复

explode(c_1)

  explode函数可以把一个array类型的数据扁平化。比如,现在每行是一个seller_id集合,使用explode可以扁平化为每行一个seller_id。但explode不可以直接与group by一起使用,比如我想按某些条件筛选一些卖家然后在查看该店铺的买家的情况:select explode(b.buyer_ids) from (select collect_set(buyer_id) as buyer_ids from t group by seller_id) b;

时间函数

unix_timestamp()

  当前时间

from_unixtime(timestamp, format)

  将系统时间戳转化为人可读的数据格式 如:select from_unixtime(unix_timestamp(), 'yyyy-MM-dd');

date_sub(string startdate, int days)

  求几天前的日期

其它

nvl(v1, v2)

  nvl函数用于处理null值,当一个字段是null时,这个字段和其它字段进行算术运算时的结果依然为null。这时可以使用这个函数为值可能为null的字段赋予一个默认值,即v2.

instr(str1, 'xxx')

  判断字符串'xxx'是否出现在str1中,如果str1是null或者不存在xxx返回值都是0

size(a1)

  返回数组a1的大小

union_all()

  合并两个查询结果,但结果的列数需要一致!!!

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

推荐阅读更多精彩内容