练习--hive查询实例和Shell去重
来源:互联网 发布:语文讲课软件 编辑:程序博客网 时间:2024/06/05 20:04
一、HIVE查询
hive中students表
nid nname ncourse ngrade
1 张三 yuwen 85
2 李四 yuwen 75
3 张三 shuxue 75
4 李四 shuxue 95
5 张三 yingyu 65
6 李四 yingyu 83
create table students(nid int,nname string,ncourse string,ngrade int)
row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/test' overwrite into table students;
问题1、使用HQL得出张三的所有科目的成绩,打印一行,如:张三 85 75 65
查询关于张三的所有内容
select x.nid,x.nname,x.ncourse,x.ngrade from students x where x.nname = '张三';
只查张三,两种方法
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from students group by nname HAVING nname = '张三';
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from (select * from students where nname='张三') a group by nname;
查所有人的
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from students group by nname;
2、显示姓名,各科成绩都在70以上的学生,如 李四
MSSQL可以,但是这个查询命令在Hive无法执行
select nname from students where nid not in(select distinct nid from students where ngrade < 70);
HQL :select a.nname from (select distinct nname from students where ngrade < 70) as b left join on students a a.nname=b.nname where b.nname is null;
或者可以自定义udf来完成
二、shell进行文件去重
aaa.txt
111
222
333
444
333
222
555
代码:
cat -n aaa.txt | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2-
代码解释:
cat -n in.txt : 输出文本,并在前面加上行号,以\t分隔
sort -k2,2 -k1,1n : 对输入内容排序,primary key是第二个字段,second key是第一个字段并且按数字大小排序
uniq -f1 : 忽略第一列,对文本进行去重,但输出时会包含第一列
sort -k1,1n : 对输入内容排序,key是第一个字段并按数字大小排序
cut -f2- : 输出第2列及之后的内容,默认分隔符为\t
hive中students表
nid nname ncourse ngrade
1 张三 yuwen 85
2 李四 yuwen 75
3 张三 shuxue 75
4 李四 shuxue 95
5 张三 yingyu 65
6 李四 yingyu 83
create table students(nid int,nname string,ncourse string,ngrade int)
row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/test' overwrite into table students;
问题1、使用HQL得出张三的所有科目的成绩,打印一行,如:张三 85 75 65
查询关于张三的所有内容
select x.nid,x.nname,x.ncourse,x.ngrade from students x where x.nname = '张三';
只查张三,两种方法
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from students group by nname HAVING nname = '张三';
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from (select * from students where nname='张三') a group by nname;
查所有人的
select nname,
max(case ncourse when 'yuwen' then ngrade else 0 end) yuwen,
max(case ncourse when 'shuxue' then ngrade else 0 end) shuxue,
max(case ncourse when 'yingyu' then ngrade else 0 end) yingyu
from students group by nname;
2、显示姓名,各科成绩都在70以上的学生,如 李四
MSSQL可以,但是这个查询命令在Hive无法执行
select nname from students where nid not in(select distinct nid from students where ngrade < 70);
HQL :select a.nname from (select distinct nname from students where ngrade < 70) as b left join on students a a.nname=b.nname where b.nname is null;
或者可以自定义udf来完成
二、shell进行文件去重
aaa.txt
111
222
333
444
333
222
555
代码:
cat -n aaa.txt | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2-
代码解释:
cat -n in.txt : 输出文本,并在前面加上行号,以\t分隔
sort -k2,2 -k1,1n : 对输入内容排序,primary key是第二个字段,second key是第一个字段并且按数字大小排序
uniq -f1 : 忽略第一列,对文本进行去重,但输出时会包含第一列
sort -k1,1n : 对输入内容排序,key是第一个字段并按数字大小排序
cut -f2- : 输出第2列及之后的内容,默认分隔符为\t
0 0
- 练习--hive查询实例和Shell去重
- hive 去重数据
- Hive数据去重
- Hive数据去重
- hive去重操作
- Shell脚本去重的几种方法实例
- ArrayList练习 ,去重
- shell去重
- shell 排序 去重
- oracle根据某个字段去重查询实例
- hive数据表去重方法
- Hive表数据去重
- sqlite 查询去重和 查询空字段
- sql 查询去重
- mysql去重查询
- sql去重查询
- 查询去重
- 查询去重问题
- 后缀式与中缀式的恩怨-->中缀表达式转化为后缀表达式
- 谷歌字体连接超时解决方案
- zoj 2770 Burn the Linked Camp 差分约束系统
- java 里面保留字volatile及其与synchronized的区别
- heartbeat+DRBD+mysql+LVS集群实战
- 练习--hive查询实例和Shell去重
- xxx is not in the sudoers file. This incident will be reported.
- tcp ip协议笔记(2)——链路层
- android developers api guides 文档学习笔记(目录)
- Leetcode Q12 : Integer to Roman
- Delphi对象和指向对像的指针
- Makefile进行宏定义
- c++异常处理机制示例及讲解
- 【HDOJ 5316】Magician