空字段赋值

1)函数说明

NVL:给值为 NULL 的数据赋值,它的格式是 NVL( string1, replace_with)。

它的功能是如果string1 为 NULL,则 NVL 函数返回 replace_with 的值,否则返回 string1 的值,如果两个参数都为 NULL ,则返回 NULL。

2)数据准备:采用emp表

emp.empno  emp.ename  emp.job  emp.mgr  emp.hiredate  emp.sal  emp.comm  emp.deptno
7369  SMITH  CLERK  7902  1980-12-17  800.0  NULL  20
7499  ALLEN  SALESMAN  7698  1981-2-20  1600.0  300.0  30
7521  WARD  SALESMAN  7698  1981-2-22  1250.0  500.0  30
7566  JONES  MANAGER  7839  1981-4-2  2975.0  NULL  20
7654  MARTIN  SALESMAN  7698  1981-9-28  1250.0  1400.0  30
7698  BLAKE  MANAGER  7839  1981-5-1  2850.0  NULL  30
7782  CLARK  MANAGER  7839  1981-6-9  2450.0  NULL  10
7788  SCOTT  ANALYST  7566  1987-4-19  3000.0  NULL  20
7839  KING  PRESIDENT  NULL  1981-11-17  5000.0  NULL  10
7844  TURNER  SALESMAN  7698  1981-9-8  1500.0  0.0  30
7876  ADAMS  CLERK  7788  1987-5-23  1100.0  NULL  20
7900  JAMES  CLERK  7698  1981-12-3  950.0  NULL  30
7902  FORD  ANALYST  7566  1981-12-3  3000.0  NULL  20
7934  MILLER  CLERK  7782  1982-1-23  1300.0  NULL  10

3)查询:如果员工的 comm 为 NULL,则用-1 代替

hive (default)> select comm,nvl(comm,-1) from emp;

4)查询:如果员工的 comm 为 NULL,则用领导 id 代替

hive (default)> select mgr,comm,nvl(comm,mgr) from emp;

时间类

1)date_format:格式化时间

hive (default)> select date_format('2019-06-29','yyyy-MM-dd');

2)date_add:时间跟天数相加

hive (default)> select date_add('2019-06-29',5);hive (default)> select date_add('2019-06-29',-5);

3)date_sub:时间跟天数相减

hive (default)> select date_sub('2019-06-29',5);hive (default)> select date_sub('2019-06-29 12:12:12',5);hive (default)> select date_sub('2019-06-29',-5);

4)datediff:两个时间相减

hive (default)> select datediff('2019-06-29','2019-06-24');
hive (default)> select datediff('2019-06-24','2019-06-29');
hive (default)> select datediff('2019-06-24 12:12:12','2019-06-29');
hive (default)> select datediff('2019-06-24 12:12:12','2019-06-29 13:13:13');

CASE WHEN

1.数据准备

name  dept_id  sex

悟空   A       男
八戒   A       男
沙僧   B       男
妖怪   A       女
豹女   B       女
轮子妈 B       女

2.创建 hive 表并导入数据

create table emp_sex(
name string,
dept_id string,
sex string)
row format delimited fields terminated by "\t";
#加载数据
load data local inpath '/opt/module/data/emp_sex.txt' into table emp_sex;

5.求出不同部门男女各多少人,按需求查询数据

selectdept_id,
sum(case sex when '男' then 1 else 0 end) male_count,
sum(case sex when '女' then 1 else 0 end) female_count
fromemp_sex
group bydept_id;

行转列

1.相关函数说明

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。

分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 array 类型字段。

2.数据准备

name  constellation  blood_type

孙悟空 白羊座 A
沙僧   射手座 A
德玛   白羊座 B
猪八戒 白羊座 A
凤姐   射手座 A

3.需求

把星座和血型一样的人归类到一起。结果如下:

4.创建本地 constellation.txt,导入数据

孙悟空  白羊座  A
沙僧  射手座  A
德玛  白羊座  B
猪八戒  白羊座  A
凤姐  射手座  A

5.创建 hive 表并导入数据

create table person_info(
name string,
constellation string,
blood_type string)
row format delimited fields terminated by "\t";
load data local inpath "/opt/module/data/person_info.txt" into table person_info;

6.按需求查询数据

selectt1.base,
concat_ws('|', collect_set(t1.name)) name
from(select
name,
concat(constellation, ",", blood_type) base
fromperson_info) t1
group byt1.base;

列转行

1.函数说明

EXPLODE(col):将 hive 一列中复杂的 array 或者 map 结构拆分成多行。

LATERAL VIEW用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

2.创建本地 movie.txt,导入数据

[root@bigdata161 datas]$ vi movie.txt

《疑犯追踪》    悬疑,动作,科幻,剧情
《Lie to me》    悬疑,警匪,动作,心理,剧情
《战狼 2》    战争,动作,灾难

3.创建 hive 表并导入数据

create table movie_info(
movie string,
category array<string>)
row format delimited fields terminated by "\t"
collection items terminated by ",";
load data local inpath "/opt/module/data/movie.txt" into table movie_info;

6.将电影分类中的数组数据展开,按需求查询数据

selectmovie,category_name
frommovie_info
lateral view explode(category) table_tmp as category_name;

窗口函数

1.相关函数说明

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化;

CURRENT ROW:当前行;

n PRECEDING:往前 n 行数据;

n FOLLOWING:往后 n 行数据;

UNBOUNDED:起点,

UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDEDFOLLOWING 表示到后面的终点;

LAG(col,n):往前第 n 行数据;

LEAD(col,n):往后第 n 行数据;

NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从 1 开始,对于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。

2.数据准备:name,orderdate,cost

jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

3.需求

(1)查询在 2017 年 4 月份购买过的顾客及总人数

(2)查询顾客的购买明细及购买总额

(3)上述的场景,要将 cost 按照日期进行累加

(4)查询顾客上次的购买时间

(5)查询前 20%时间的订单信息

4.创建本地 business.txt,导入数据

[root@bigdata161 datas]$ vi business.txt

5.创建 hive 表并导入数据

create table business(
name string,
orderdate string,
cost int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';load data local inpath "/opt/module/data/business.txt" into table business;

6.按需求查询数据

(1)查询在 2017 年 4 月份购买过的顾客及总人数

select name,count(*) over()
from business
where substring(orderdate,1,7) = '2017-04'
group by name;

(2)查询顾客的购买明细及月购买总额

selectname,orderdate,cost,sum(cost) over(partition by month(orderdate))
frombusiness;

(3)上述的场景,要将 cost 按照日期进行累加select

美化后

SELECT
`NAME`,
orderdate,
cost,
#--所有行相加
sum( cost ) over ( ) AS sample1,
#--按 name 分组,组内数据相加
sum( cost ) over ( PARTITION BY NAME ) AS sample2,
#-- 按 name 分组,组内数据累加
sum( cost ) over ( PARTITION BY NAME ORDER BY orderdate ) AS sample3,
#--和 sample3 一样,由起点到当前行的聚合
sum( cost ) over ( PARTITION BY NAME ORDER BY orderdate rows BETWEEN UNBOUNDED PRECEDING AND current ROW ) AS sample4,
#--当前行和前面一行做聚合
sum( cost ) over ( PARTITION BY NAME ORDER BY orderdate rows BETWEEN 1 PRECEDING AND current ROW ) AS sample5,
#--当前行和前边一行及后面一行
sum( cost ) over ( PARTITION BY NAME ORDER BY orderdate rows BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS sample6,
# --当前行及后面所有行
sum( cost ) over ( PARTITION BY NAME ORDER BY orderdate rows BETWEEN current ROW AND UNBOUNDED FOLLOWING ) AS sample7
FROM
business;

执行的sql

select name,orderdate,cost,
sum(cost) over() as sample1,
sum(cost) over(partition by name) as sample2,
sum(cost) over(partition by name order by orderdate) as sample3,
sum(cost) over(partition by name order by orderdate rows between
UNBOUNDED PRECEDING and current row ) as sample4 ,
sum(cost) over(partition by name order by orderdate rows between
1 PRECEDING and current row) as sample5,
sum(cost) over(partition by name order by orderdate rows between1 PRECEDING AND 1 FOLLOWING ) as sample6,
sum(cost) over(partition by name order by orderdate rows between
current row and UNBOUNDED FOLLOWING ) as sample7
from business;

(4)查看顾客上次的购买时间

select name,orderdate,cost,
lag(orderdate,1,'1900-01-01') over(partition by name order by
orderdate ) as time1, lag(orderdate,2) over (partition by name
order by orderdate) as time2
from business;

(5)查询前 20%时间的订单信息

select * from (
select name,orderdate,cost, ntile(5) over(order by orderdate)
sorted
from business
) t
where sorted = 1;

大数据常见函数及案例实战相关推荐

  1. Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战

    版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ邮箱地址:1120746 ...

  2. 东华软件张涵诚:政府大数据应用的案例和数据价值释放的方法

    作者:张涵诚 在我国,政府部门掌握着全社会量最大.最核心的数据.以往地方政府提振经济一般是招房地产.工厂等,随着土地及人口红利殆尽,大数据成为与水电煤等一样重要的生产资料,成为继土地之后政府最重要的资 ...

  3. 大数据核心技术与应用实战峰会(上):大数据在多行业内大放异彩

    5月13日-15日,由全球最大中文IT社区CSDN主办的"2016中国云计算技术大会"(Cloud Computing Technology Conference 2016,简称C ...

  4. 大数据核心技术与应用实战峰会(下):六专家带你探秘各企业内的大数据实践...

    5月13日-15日,由全球最大中文IT社区CSDN主办的"2016中国云计算技术大会"(Cloud Computing Technology Conference 2016,简称C ...

  5. 收藏 | 2015年度大数据应用经典案例Top100

    2019独角兽企业重金招聘Python工程师标准>>> 在当前的互联网领域,大数据的应用已十分广泛,尤其以企业为主,企业成为大数据应用的主体.大数据真能改变企业的运作方式吗?答案毋庸 ...

  6. 《大数据存储:MongoDB实战指南》一1.1 什么是大数据

    本节书摘来异步社区<大数据存储:MongoDB实战指南>一书中的第1章,第1.1节,作者: 郭远威 , 彭文波 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区" ...

  7. 数据科学与大数据技术的案例_主数据科学案例研究,招聘经理的观点

    数据科学与大数据技术的案例 I've been in that situation where I got a bunch of data science case studies from diff ...

  8. 数据科学与大数据技术的案例_作为数据科学家解决问题的案例研究

    数据科学与大数据技术的案例 There are two myths about how data scientists solve problems: one is that the problem ...

  9. BDTC 2017 | “TOP10大数据应用最佳案例实践”十佳获奖单位精彩分享

    [CSDN现场报道]12月7-9日,由中国计算机学会主办,CCF 大数据专家委员会承办,中国科学院计算技术研究所.中科天玑数据科技股份有限公司.CSDN协办的2017中国大数据技术大会(BDTC 20 ...

最新文章

  1. Opencv java 角点检测 preCornerDetect(15)
  2. 【翻译】CodeMix使用的语言和框架(二):PHP
  3. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制
  4. 类型两个数相减_小学数学简便计算12种分类+5种易错类型,打印出来给孩子练习!(可打印!)...
  5. C语言orders order订单的算法(附完整源码)
  6. 机器学习-数据集类型04
  7. 在MVC项目中使用Ninject
  8. 加密机工作原理_端子机压力检测装置工作原理
  9. Android 系统(184)---Android APN 配置
  10. css3禅密花园叫什么名字_CSS秘密花园: 自定义下划线
  11. Python-面向对象(进阶)
  12. fiddler网站请求被拦截怎么恢复?
  13. 30hibernate_fetch_1_select
  14. webpack构建工具快速上手指南
  15. 作业五之系统设计时所实现的质量属性战术
  16. 2020-04-17-E-prime常见问题汇总
  17. python输入两个数 求和_Python两数相加
  18. 抖音昵称html,抖音个性网名带特殊符号 带漂亮符号的抖音昵称
  19. 几个比较实用的网址链接
  20. [透视变换]象棋棋盘矫正Python&OpenCV

热门文章

  1. 推荐收藏 | 决策树,逻辑回归,PCA-算法面经
  2. 海思CEA-861时序配置
  3. 条码打印软件中如何插入特殊字符
  4. mpv播放器键盘快捷键
  5. 51单片机开发入门(3)-IO口应用
  6. 背包问题C/C++语言
  7. linux内核-进程的调度与切换
  8. Phonetic symbol 双元音 -- ɪə
  9. SAP BP最佳业务实践
  10. 【新手向】emacs配置文件