Zeppelin框架及Hive查询操作

简介: Apache Zeppelin是一款基于Web交互式框架,支持多种语言,Scala、SparkSQL、Markdown,SQL、Shell、Python等。可以使用Zeppelin链接SparkSQL。Zeppelin提供数据分析、数据可视化。打开浏览器 访问,xxxx:8090。Zeppelin安装和使用。一键启动集群中所有的组件。

1)、介绍

Apache Zeppelin是一款基于Web交互式框架,支持多种语言,Scala、SparkSQL、Markdown,SQL、Shell、Python等。

Zeppelin提供数据分析、数据可视化。

可以使用Zeppelin链接SparkSQL

Zeppelin安装和使用

1)、安装

2)、使用

一键启动集群中所有的组件

cd /export/onekey

./start_all.sh

打开浏览器 访问,xxxx:8090

4)使用

1、创建note

2、编写SparkSQL

3、通过设置Zepplin的一些参数,方便使用

Hive查询操作

1)、基本语法

select [distinct]select_expr, select_expr, ... 
from table_reference 
[where where_condition] 
[group by col_list] 
[having where_condition] 
[order by col_list] ... 
[limit number]
 
 
解释:
 select 查询关键字
 distinct 去重
 from 指定要查询的表
 where 指定查询条件
 group by  分组查询
 having 对分组后的结果进行条件筛选
 order by  排序
 limit  查询指定的记录数

2)、全表查询

select * from score;

3)、选择特定列查询

select sid, cid from score;

4)、使用别名查询

select sid as stu_id , cid course_id from score;

Hive查询操作-聚合函数

1)、介绍SparkSQL提供的聚合函数可以用来统计、求和、求最值等等

count:统计行数量

sum:获取单个列的合计值

avg:计算某个列的平均值

max:计算列的最大值

min:计算列的最小值

2)、应用

求总行数(count)

select count(1) from score;

select count(*) from score;

求分数的最大值(max)

select max(sscore)from score;

求分数的最小值(min)

select min(sscore)from score;

求分数的总和(sum)

select sum(sscore)from score;

求分数的平均值(avg)

select avg(sscore)from score;

Hive查询操作-where语句

1)、介绍

使用where语句,可以查询满足条件的数据,where语句紧随from关键字,where条件语句写法丰富,是Hive数据分析的灵魂之一。

2)、应用

# 查询出分数大于60的数据
select * from score where sscore > 60

Hive查询操作-操作符

1)、介绍

SparkSQL中提供了很多的操作运算符

2)、比较运算符
image.png
image.png

Hive查询操作-比较运算符

1)、实例1

(1)查询分数等于80的所有数据
select * from score where sscore=80;
 (2) 查询分数在80到100的所有数据
select * from score where sscore between 80 and 100;
(3)查询成绩为空的所有数据
select * from score where sscore is null;
(4) 查询成绩是80 或90 的数据
select * from score where sscore in(80,90);

2)、应用2-like

使用like运算选择类似的值

选择条件可以包含字符或数字

%代表零个或多个字符(任意个字符)

_代表一个字符

(1)查找姓“李”的学生信息
select * from student where sname like '李%';
(2)查询名字第二个字是“兰”的学生信息
select * from student where sname like '_兰%';

Hive查询操作-操作符

1)、逻辑运算符
image.png
2)、实例

(1)查询成绩大于80 ,并且sid是01的数据
select * from score where sscore>80 and sid ='01';
(2)查询成绩大于80, 或者sid是01的数据
select * from score where sscore >80 or sid = '01';
(3)查询s_id不是01 和02的学生
select * from score where sid not in('01', '02');

Hive查询操作-分组查询

1)、介绍

分组关键字是group by,该语句通常会和聚合函数一起使用,按照一个或多个列对结果进行分组,然后对每个组执行聚合操作,注意使用group by分组之后,select 后面的字段只能是分组字段和聚合函数。

2)、实例

(1)计算每个学生的平均分数
select sid , avg(sscore) from score group by sid;
(2)计算每个学生的最高成绩
select sid, max(sscore)  from score group by sid;

Hive查询操作-Having语句

1)、介绍

Having语句通常于group by语句联合使用,用来过滤由group by语句返回的记录及集。Having语句的存在弥补了where关键字不能与聚合函数联合使用的不足

2)、实例

# 求每个学生平均分数大于85的人
select sid, avg(sccore) avgscore from score group by sid having avgscore > 85;

Hive查询操作-排序

1)、介绍

排序关键字order by,用于根据指定的列对结果集进行排序,在排序时,可以指定排序顺序,asc为升序,desc 为降序。

2)、案例

(1)查询学生的成绩,并按照分数升序排列
select * from score order by sscore asc;
(2)按照分数的平均值降序排列
select sid, avg(sscore) avg from score group by sid order by avg desc;

Hive查询操作-limit语句

1)、介绍

limit子句限制查询结果返回的数量

2)、案例

# 查询3条数据
select * from student limit 3;

Hive查询操作-多表操作

1)、介绍

(1)内连接查询
隐式内连接:
select * from A,B where 条件;
显示内连接:
select * from A inner join B on 条件;

image.png

(2)外连接查询

左外连接 :left outer join
select * from A left outer join B on 条件;
右外连接: right outer join
select * from A right outer join B on 条件;

image.png

Hive查询操作-多表查询

1)、内连接案例

内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留

# 查询每个老师对应的课程信息
# 隐士内连接
select * from teacher t, course c where t.tid = c.tid;
 
# 显示内连接
select * from teacher t inner join course c on t.tid = c.tid;
select * from teacheer t jion course c on t.tid = c.tid;

image.png

2)、外连接案例

左外连接(left outer join)

左外连接:join 操作符左边表中符合where子句的所有记录将会被返回。

# 查询老师对应的课程
select * from teacher t left join course c on t.tid = c.tid;

右外连接(right outer join)

右外连接:join 操作符右边表中符合where 子句的所有记录将会被返回。

select * from teacher t right join course c on t.tid = c.tid;

满外连接(full outer join)

满外连接:将会返回所有表中符合where 语句条件的所有记录,如果任一表的指定字段没有符合条件的值的话,那么就是null值代替。

# 查询老师对应的课程
select * from teacher t full join course c on t.tid = c.tid;

Hive 查询操作-子查询

查询允许把一个查询嵌套在另一个查询中,其实就是select的嵌套

1)、将查询结果当成一个值

# 查询成绩最高学生的sid
select sid from score where sscore = (select max(sscore) from score);

2)、将结果当成一张表

# 将查询结果当成一张表
select sid from score a,(select max(sscore) max_score from score) b where a.sscore = b.max_score;

Hive内置函数

1)、介绍

在SparkSQL中提供了很多的内置函数,或者叫内嵌函数,包括聚合函数、数学函数、字符串函数、转换函数、日期函数、条件函数、表生成函数。

2)、数学函数

# 指定精度取整函数:round
语法: round(double a, int b)
说明:返回指定精度d的double类型
举例:hive> select round(3.1415926,4);
3.1416
 
取随机数函数: rand 
语法: rand(),rand(int seed) 
说明:返回一个0到1范围内的随机数。如果指定种子seed,则会返回固定的随机数 
举例: 
hive> select rand(); 
0.5577432776034763 
hive> select rand(100); 
0.7220096548596434 

3)、字符串函数

字符串连接函数-带分隔符:concat_ws 
语法: concat_ws(string SEP, string A, string B…) 
说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符 
举例: 
hive> select concat_ws(',','abc','def','gh’); 
abc,def,gh 
 
字符串截取函数:substr,substring 
语法: 
substr(string A, int start, int len),
substring(string A, intstart, int len) 
返回值: 
string 说明:返回字符串A从start位置开始,长度为len的字符串 
举例: 
hive> select substr('abcde',3,2); 
cd 
hive>select substring('abcde',-2,2);
de

4)、日期函数

日期转年函数: year 
语法: year(string date) 
说明:返回日期中的年。 
举例: 
hive> select year('2012-12-08’); 
2012 
日期增加函数: date_add 
语法: date_add(string startdate, int days) 
说明:返回开始日期startdate增加days天后的日期。 
举例: 
hive> select date_add('2012-12-08',10); 
2012-12-18 
日期减少函数: date_sub 
语法: date_sub (string startdate, int days) 
返回值: string 说明:返回开始日期startdate减少days天后的日期。 
举例: hive> select date_sub('2012-12-08',10); 
2012-11-28 

5)、条件判断函数

语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
返回值: T
说明:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回
 
 
案例:
select 
sid ,
case 
  when sscore>=60 
    then '及格’ 
  when sscore<60 
    then '不及格’
  else '其他’ 
end as flag
from score
 

6)、行转列操作

行转列是指多行数据转换为一个列的字段

Hive行转列用到的函数

concat_ws(sep, str1,str2) --以分隔符拼接每个字符串

collect_set(col) --将某字段的值进行去重汇总,产生array类型字段

7)、行转列操作

1:建表 
create table emp( deptno int, ename string ) row format delimited fields terminated by '\t’; 
 
2:插入数据: 
load data local inpath "/export/data/hivedatas/emp.txt" into table emp; 
 
3:转换 
 
select deptno,concat_ws("|",collect_set(ename)) as ems from emp group by deptno;。

Hive内置函数-开窗函数

lrow_number,rank,dense_rank

row_number,rank,dense_rank这三个函数用于数据排名,也可以用于分组排名。

1)、row_number,rank,dense_rank

-- 创建表
create table user_ access (
 user_id string, 
 createtime string, --day 
 pv int 
) 
row format DELIMITED FIELDS TERMINATED BY ','; 
 
-- 加载数据: 
load data local inpath '/export/data/hivedatas/user_access.txt' into table user_log;
 
--实现分组排名
  --  ROW_NUMBER()  从1开始,按照顺序,生成分组内记录的序列
  -- RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位  
  -- ENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
 
select user_id, createtime, pv, 
rank() over(partition by user_id order by pv desc) AS rn1, 
dense_rank() over(partition by user_id order by pv desc) as rn2, 
row_number() over(partition by user_id order by pv desc) as rn3 from user_access; 

2)、sum,avg,min,max

用于实现分组内所有和连续累积的统计。

-- 从开头累加到当前行 
select user_id,createtime,pv, 
sum(pv) over(partition by user_id order by createtime rows between unbounded preceding and current row) as pv2 
from user_access; 
 
-- 从前3行累加到当前行 
select user_id,createtime,pv, sum(pv) over(partition by user_id order by createtime rows between 3 preceding and current row) as pv4 
from user_access; 
 
-- 从前3行累加到后一行 
select user_id,createtime,pv, sum(pv) over(partition by user_id order by createtime rows between 3 preceding and 1 following) as pv5 from user_access;

3)、sum,avg,min,max

-- 从开头累加到当前行 
select user_id,createtime,pv, 
max(pv) over(partition by user_id order by createtime rows between unbounded preceding and current row) as pv2 
from user_access; 
 
-- 从前3行累加到当前行 
select user_id,createtime,pv, max(pv) over(partition by user_id order by createtime rows between 3 preceding and current row) as pv4 
from user_access; 
 
-- 从前3行累加到后一行 
select user_id,createtime,pv, max(pv) over(partition by user_id order by createtime rows between 3 preceding and 1 following) as pv5 from user_access;
目录
相关文章
|
6月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
393 0
|
12月前
|
SQL Java 数据库连接
Hive教程(08)- JDBC操作Hive
Hive教程(08)- JDBC操作Hive
759 0
|
12月前
|
SQL 存储 分布式计算
Hive的简单操作
Hive的简单操作
62 0
|
SQL 缓存 分布式计算
54 Hive的Join操作
54 Hive的Join操作
137 0
|
SQL HIVE
53 Hive的SELECT操作
53 Hive的SELECT操作
56 0
|
SQL 存储 分布式数据库
【通过Hive清洗、处理和计算原始数据,Hive清洗处理后的结果,将存入Hbase,海量数据随机查询场景从HBase查询数据 】
【通过Hive清洗、处理和计算原始数据,Hive清洗处理后的结果,将存入Hbase,海量数据随机查询场景从HBase查询数据 】
232 0
|
6月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
220 0
|
23天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
25 4
|
23天前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
27 2
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。