Hive实现离线计算(HQL)
👨🏻🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
大数据业务分为两大:实时计算,离线计算
实时计算:实时对来到的数据进行及时计算
离线计算:对堆积已久的数据进行计算(MapReduce(效率低)、Hive)
Hive提供了 一种类SQL的操作进行查询统计
Hive的底层:是基于MapReduce的引擎,会将查询语句转换为Map阶段和Reduce阶段
MR、Hive:离线计算处理模块的技术
Hive特点:
- 可扩展性———>Hive自由扩展集群的规模,一般无需重启服务
- 延展性————>Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
- 容错性————>节点宕机,SQL任然可以完成执行
数据仓库(DataWarehouse):可以包含多个数据库
数据库:包含多个表
Hive与传统数据库的对比:
Hive常用交互命令:
-
"-e" 不进入hive的交互窗口执行sql
-
“-f” 执行脚本中的sql语句
-
编写selectdata.sql脚本
-
执行sql脚本
-
将sql执行的结果写入文件中
-
Hive其他命令操作:
-
退出hive窗口(老版本有区别,新版没有区别):
-
在hive cli命令窗口中查看hdfs文件系统
-
在hive cli命令窗口中查看本地文件系统
-
查看在hive中输入的所有的历史命令
Hive数据仓库位置配置:
-
配置Default数据仓库的位置,默认是在hdfs上的:/user/hive/warehouse/(预先存在的路径)下,可以将下面的标签片段编写到hive-site.xml中就可以改变Default数据创库的位置
-
切记配置完Default数据创库的位置,需要设置同组可读的权限
-
-
后台信息查询配置hive-site.xml,就可以实现显示当前数据库,以及查询表的头信息配置
Hive运行日志信息配置:
-
在/tmp/hadoop目录下可以看到hive的日志文件,进行排错,hive.log、hive.log.2020-09-27....
-
拷贝并修改hive-log4j.properties. template——>hive-log4j.properties
参数配置方式:
-
查看当前所有的配置信息
-
参数配置的三种方式
-
配置文件方式
- 默认配置文件:hive-default.xml
- 用户自定义配置文件:hive-site.xml(会覆盖默认配置)
-
命令行参数方式
-
启动hive时,在命令行添加-hiveconf param=value来进行参数设定(
本次有效
) -
查看参数设置:
-
-
参数声明方式
可以在HQL中使用SET关键字设定参数(
本次有效
)
- 三种配置的优先级:配置文件<命令行参数<参数声明
-
Hive的基本概念:
- 用户可以在Hive中执行Hadoop的fs命令,如“dfs -ls /;”查询hdfs上存储的数据
- 在hive中使用hadoop命令比直接在bash shell中执行hadoop dfs更加高效,在hive中是会在同一个进程中执行这些命令,而在bash shell执行则会每次启动一个JVM的新实例。
Hive中的基本数据类型:
- Hive v0.8.0版本中增加了时间戳数据类型和二进制数组数据类型
- 所有的数据类型都是对Java中的数据类型接口的实现
- 新增数据类型TIMESTAMP的值可以是整数,也就是距离Unix新纪元时 间( 1 970年1月1日, 午夜12点)的秒数;也可以是浮点数,即距离 Unix新纪元时间的秒数,精确到纳秒(小数点后保留9位数) ; 还可以 是字符串,即JDBC所约定的时间字符串格式,格式为YYYY-MM-DD hh:mm:s.ffffff。
- TIMESTAMPS表示的是UTC时间。Hive本身提供了不同时区间互相转 换的内置函数,也就是to_ utc timestamp函数和from utc_ timestamp函数
- BINARY数据类型和很多关系型数据库中的VARBINARY数据类型是 类似的,但其和BLOB数据类型并不相同。因为BINARY的列是存储在 记录中的,而BLOB则不同。BINARY可以在记录中包含任意字节,这 样可以防止Hive尝试将其作为数字,字待串等进行解析。
- String相当于varchar,可以单个存储2G的字符数
操作
-
创建stu表
-
在/home/hadoop/databasesdata/下创建stu.txt,并加入以下内容
- tips:数据和数据之间要严格按照创建表时指定的数据分割格式,不然之后加载进表中会出现
NULL
值
- tips:数据和数据之间要严格按照创建表时指定的数据分割格式,不然之后加载进表中会出现
-
将数据加载进stu表
集合数据类型
-
Hive中的列支持使用struct、map和array集合数据类型
操作
-
创建star表
- row format delimited fields terminated by ',':每行每条语句的分隔符
- collection items terminated by '_' :array的数据分隔符
- line terminated by '\n':行分隔符
类型转化
- Hive的原子数据类型可以进行隐式转化,可以正向转化,不会进行反向转化,如果传入的值不是低于属性的数据类型,而是高于其,则会直接报错,可以使用CAST进行操作,将不会进行报错。
隐式类型转换
-
任何类型都可以准换成一个更广的类型
TINYINT—>INT—>BIGINT
-
所有整数类型、FLOAT和STRING都可以隐式转换成DOUBLE
-
TINYINT、SMALLINT、INT都可以转换成FLOAT
-
BOOLEAN不允许转换成其他类型
强制转换
例子:
- CAST('1' AS INT)是将字符串型‘1’转换成整数1,
- 如果强制类型转换失败,执行了CAST('X' AS INT) 表达式将返回空值NULL
DDL数据定义
创建数据库
-
创建的数据库默认是在/user/hive/warehouse/下
-
使用not exitis判断是否预先已有数据库
-
创建数据库,并制定数据库在HDFS上存储的位置
查询数据库
显示数据库
-
显示数据库
-
过滤显示查询的数据库,*
查询数据库详情
-
显示数据库信息
-
显示数据库详细信息,extended
切换当前数据库
修改数据库
- tips:通过设置键值对的形式修改数据库的属性信息,
数据库其他的元数据都是不可以更改的,包括数据库名和数据库所在的目录位置
,可以通过extend查看修改之后的信息
删除数据库
-
tips:可以采取if exists进行判断数据库是否存在,数据库不为空的情况下采取cascade命令将其删除
创建表
语法:
管理表
- 默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive会(或多或少地)控制着数据的生命周期,当我们删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。
-
普通表创建
-
根据查询结果创表
-
根据已经存在的表结构创建表
-
查询表的类型
外部表
- 因为表是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉
案例:
-
dept.txt
-
emp.txt
-
建表语句(dept、emp)
-
加载数据进表中
管理表和外部表的互相转换
-
首先查询表的类型使用
-
修改内部表stu为外部表
-
修改外部表stu为内部表
分区表
- 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。谓词下推(先where筛选)
-
创建分区表
-
加载数据到分区表中
-
查询分区表中数据
-
增加分区
-
删除分区
-
查看分区表中有分区
-
查看分区结构
二级分区:
-
创建二级分区
-
正常加载数据到分区
-
把数据直接上传到分区目录,让分区和数据表产生关联的三种方式
-
方式一:上传数据后修复
上传数据
-
此时查询分区是查询不到的,需要修复分区
执行修复分区的命令
-
-
方式二:上传数据后添加分区
上传数据
添加分区
-
方式三:创建文件夹后load数据到分区
创建目录
上传数据
修改表
-
修改表名
-
增加/修改/替换列信息
-
语法
更新列
增加和替换列
- 注:ADD是代表新增一字段,字段位置在所有列后面(partition列前),REPLACE则是表示替换表中所有字段。
-
例子:
查询结构
添加列
更新列
替换列
-
-
- 点赞
- 收藏
- 关注作者
评论(0)