美文网首页
hive基础语法

hive基础语法

作者: 何几时 | 来源:发表于2021-03-30 17:11 被阅读0次

目录

  1. Hive安装和启动
  2. Hive表操作-分区表
  3. Hive表操作-复杂类型操作
  4. Hive 查询语句
  5. Zepplin框架
  6. 网约车日志分析项目

Hive安装和启动

1:启动集群中所有的组件

cd /export/onekey
./start-all.sh

2:使用终端连接Hive

  1. 进入到/export/server/spark-2.3.0-bin-hadoop2.7/bin目录中
  2. 执行以下命令:./beeline
  3. 输入:!connect jdbc:hive2://node1:10000,回车
  4. 输入用户名:root
  5. 直接回车,即可使用命令行连接到Hive,然后就可以执行HQL了。

3:打开 beeline 前先输入以下命令

`nohup hive --service hiveserver2 &回车`

Hive表操作-分区表

  • 一级分区
  • 多级分区
  • 分区操作(查看、添加、删除)

定义

:star2: 在大数据中,最常用的一种思想就是分治,分区表实际就是对应hdfs文件系统上的的独立的文件夹,该文件夹下是 该分区所有数据文件。

:star2:分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。

:star2:Hive中可以创建一级分区表,也可以创建多级分区表

:star2:根据内外部表可区分出==分区内部表==、==分区外部表==

一级分区表

1.创建分区表

create table score(sid string,cid string, sscore int) partitioned by (month string) row format delimited fields terminated by '\t';

2.加载数据

load data local inpath '/export/data/hivedatas/score.txt' into table score partition (month='202006');

:sailboat:分区表妙用

1.可见分区字段会显示在表中,但是它并不是真实存在于表的字段

2.加载同一等级不同分区的数据

load data local inpath '/export/data/hivedatas/score.txt' 
into TABLE score partition (month='202007');

3.这时可以指定分区字段值当作筛选条件【分区表和where联动】

多级分区表

1.创建多级分区表

create table score2(sid string,cid string, sscore int) partitioned by (year string,month string, day string) 
row format delimited fields terminated by '\t'; 

2.加载数据

load data local inpath '/export/data/hivedatas/score.txt' 
into TABLE scores partition (year='2020',month='06',day='01');

:sailboat:分区表妙用

1.加载同一等级不同分区的数据

load data local inpath '/export/data/hivedatas/score.txt' 
into TABLE scores partition (year='2020',month='06',day='02');

2.指定分区字段值当作筛选条件【分区表和where联动】

分区操作(查看、添加、删除)

  • 查看分区 show partitions tb_name;

    show partitions score;
    
  • 添加分区

    alter table score add partition(month='202008’); 
    alter table score add partition(month='202009') partition(month = '202010');
    
  • 删除分区

    alter table score drop partition(month = '202010');
    

Hive表操作-复杂类型操作

  • Array类型

Array类型

定义:Array是数组类型,Array中存放相同类型的数据。

  • 源数据

    zhangsan    beijing,shanghai,tianjin,hangzhou
    wangwu    changchun,chengdu,wuhan,beijin
    
  • 建表语句【这条语句报错】

    create external table hive_array(name string, work_locations array<string>) row format delimited fields terminated by '\t’ 
    collection items terminated by ','; 
    
    Error while compiling statement: FAILED: ParseException line 2:32 cannot recognize input near ',' '<EOF>' '<EOF>' in serde properties specification (state=42000,code=40000)
    
  • 数据加载

    load data local inpath '/export/data/hivedatas/array_data.txt' overwrite into table hive_array;
    
  • 常用查询

    -- 查询所有数据 
    select * from hive_array; 
    -- 查询loction数组中第一个元素 
    select name, work_locations[0] location from hive_array; 
    -- 查询location数组中元素的个数 
    select name, size(work_locations) location from hive_array; 
    -- 查询location数组中包含tianjin的信息 
    select * from hive_array where  array_contains(work_locations,'tianjin'); 
    

Hive 查询语句

别名大坑:不同于MySQL中用 "别名",HSQ的别名用

`别名`

多表查询

1.内连接查询

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

2.外连接【比MySQL多了全外连接】

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

 # 右外连接:right outer join 
   select * from A right outer join B on 条件;
 
 # 全外连接:full join(如果任一表的指定字段没有符合条件的值的话,那么就使用NULL值替代。)
   select * from A full join B on 条件;

Hive内置函数

1.字符串函数

字符串连接函数-带分隔符:==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), --start是顺序
substring(string A, int start, int len) -- start可以是逆序【即负数】
返回值:
string 说明:返回字符串A从start位置开始,长度为len的字符串
举例:

hive> select substr('abcde',3,2); 
cd 
hive>select substring('abcde',-2,2);
de

2.日期函数

日期转年函数: ==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

3.行转列操作

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

Hive行转列用到的函数:
concat_ws(sep, str1,str2) --以分隔符拼接每个字符串
collect_set(col) --将某字段的值进行去重汇总,产生array类型字段

示例:

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;

3.开窗函数

row_number,rank,dense_rank

生产中只用rank和dense_rank,row_number不合理

rank() 输出的排名 (1,2,3,3,5)

dense_rank() 输出的排名 (1,2,3,3,4)

示例:

-- 创建表,pv是访问次数
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_access;

--实现分组排名
  -- ROW_NUMBER()  从1开始,按照顺序,生成分组内记录的序列
  -- RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位  
  -- DENSE_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;

4.sum,avg,min,max

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

:arrow_right:SUM

-- 从开头unbounded preceding累加到当前行current row
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;

:arrow_right: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;

Zepplin框架

Zepplin介绍

定义:

Apache Zeppelin是一款基于Web交互式框架,支持多种语言,提供了==数据分析==、==数据可视化==功能。

项目中的作用(两个):

使用Zeppelin来连接到Spark SQL的Thrift Server,可以以更直观的方式来查看Hive中的数据。而且Zeppelin也可以以图表的方式展示数据。

总结:

使用Zeppelin来连接到Spark SQL的Thrift Server的好处有两个:

  1. 以更直观的形式来查看hive中的数据
  2. 可以以图表的方式展示数据

Zeppelin安装和使用

安装:黑马课程提供的虚拟机已安装

使用

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

    cd /export/onekey 
    ./start_all.sh
    
  2. 打开浏览器,输入地址访问:http://192.168.88.100:8090/

网约车日志分析项目

搭建大数据环境并连接各个组件

数仓分层:

1.原始日志数据会存放在临时存储层ODS层

2.预处理数据会放在数据仓库DW层

3.分析得到的结果数据放在应用层APP层

ods层分区表建立与数据加载

dw层的数据预处理及加载

case有两种写法,但是只用记住第二种写法

case when then

when then

...

end

app层的订单指标分析及加载

Sqoop数据导出

Superset数据可视化

:star:

hour() 返回null问题

解决办法来自:https://community.cloudera.com/t5/Support-Questions/hive-date-time-problem/td-p/139953

解决办法是,弃用date_format(),改用==from_unixtime(unix_timestamp(b,'yyyy-MM-dd HH:mm'))==

date_format()

适用于得出单独的年月日,比如hour(date_format(b,'yyyy-MM-dd')) 、year(date_format(b,'yyyy-MM-dd'))、month(date_format(b,'yyyy-MM-dd'))

不适用于时分秒函数内

from_unix_timestamp(unix_timestamp(b,'yyyy-MM-dd HH:mm'))

适用于所有日期的情况,无论是年月日时分秒,在规整时间后就可以得到年月日时分秒

相关文章

  • HIVE基础语法

    1、HIVE基本结构 Hive中主要包含以下几种数据模型:database(数据库),Table(表),Exter...

  • hive基础语法

    目录 Hive安装和启动 Hive表操作-分区表 Hive表操作-复杂类型操作 Hive 查询语句 Zepplin...

  • 数据仓库-Hive基础(六) Hive 查询语法

    数据仓库-Hive基础(六) Hive 查询语法 SELECT order by 会对输入做全局排序,因此只有一个...

  • Hive学习笔记:基础语法

    Hive基础语法 1、创建表 – 用户表 CREATE[EXTERNAL外部表]TABLE[IF NOT EXIS...

  • HiveSQL核心技能之常用函数

    目标:1、掌握hive基础语法、常用函数及其组合使用2、掌握一些基本业务指标的分析思路与实现技巧 一、基础语法 1...

  • Hive框架基础(一)

    * Hive框架基础(一) 一句话:学习Hive有毛用? 那么解释一下 毛用: * 操作接口采用类SQL语法,提供...

  • Hive基础sql语法(DML)

    DML操作(Data Manipulation Language) 参考官方文档: DML文档 因update和d...

  • Hive基础sql语法(DDL)

    前言: 经过前面的学习 我们了解到Hive可以使用关系型数据库来存储元数据,而且Hive提供了比较完整的SQL功能...

  • hive语法

    查询语句 自动升级数据类型 在做join或计算处理时候,低级的type会自动升级成高级的,如int-bigint,...

  • Hive 基础

    Hive 基础 Hive启动: 插入数据: 插入数据文件: Hive交互命令: 参数配置方式: hive> set...

网友评论

      本文标题:hive基础语法

      本文链接:https://www.haomeiwen.com/subject/wleghltx.html