第六章 hive(6.3-6.8 hive的常用的属性交互命令,数据简介基本操作,hql基本操作导入为数据导入,导出内部表、外部表、分区表、窗口函数、case when命令,这些全部都是非常重要的部分)
一.hive常用交互指令
- 查看帮助:bin/hive -help
- 启动时指定进入某个数据库:bin/hive –database dbname
- 在命令行执行sql语句:bin/hive -e “sql语句”
- 执行含sql语句的文件:bin/hive -f filepath
- 临时修改配置参数,重启hive后失效:bin/hive -hiveconfig <property=value>
- 退出hive:quit、exit、ctrl+C
- Hive shell中执行linux命令:!如!ls/ !cd …/
- Hive shell中执行hdfs命令:dfs -ls/
二.Hive常见数据类型
- tinyint:1byte整数
- smallint:2byte整数
- int:4byte整数
- bigint:8byte整数
- Boolean:布尔类型
- Float:单精度浮点数
- Double:双精度浮点数
- String:字符
- Timestamp:时间
三.Hive 数据库的基本操作
- 创建数据库:create database if not exists dbname
- 数据库中数据表导入数据: use dbname; create table if not exists tbname(name string,age int)row format delimited fields terminated by ‘\t’; load data inpath ‘path’into table tbname; select * from tbname;
- 创建数据库时指定location:默认在hdfs的user/hive/warehouse目录下创建dbname.db目录,其中创建tbname目录,创建数据库时可指定location create database if not exists tmp2 location ‘/hive/tmp2’;
- 数据库删除语句 无法删除非空数据库:drop database dbname 强制删除:drop database dbname cascade
- 显示数据库:show databases 模糊查找:show databases like “db_hive*”
- 查看数据库详细信息 desc database extended dbname
四.Hive中表的基本操作
- 创建表命令格式:create table if not exists tbname(name string,age int)
- row format delimited fields terminated by ‘\t’以\t分割
- stored as textfile 数据存储的格式为文本文件
- load data local inpath ‘…’ 表示数据存储的路径和文件名,加local表示本地路径,不加表示hdfs路径
- 导入数据 load data local inpath ‘…’overwrite into table tbname 红色是可选,overwrite代表覆盖
- 添加as子查询方式创建表 create table tbname as select name from tbname
- 通过like创建表:create table tbname2 like tbname1,as是将查询结构放入新表,like只复制表结构
- 删除表:drop table tbname
- 清空表:truncate table tbname
- 查看表:desc extend formatted tbname :formatted格式化输出表信息
- 重命名表:alter table tbname rename to newname
- 替换(修改)列:alter table tbname change col_old_name col_new_name type
- 增加列:alter table tbname add col_name type
五.HQL基本使用
- 全表查询与特定列查询:select * from tmp
- 指定列别名:select ename as name,depno db from tmp
- 算术运算符:select sal+1 from tmp
- Where、limit、distinct:select * from tmp where deptno=30 distinct去重
- 比较运算符: = (省略)
- 逻辑运算符:and or not
- 聚合函数:count max min sum avg count(列名)会不统计null
- Like选择类似的值:select * from tmp where name like ‘a%’
- 分组查询:group by ,having
- 连接:join on,left join,right join,full join
- 排序:order by,sort by,distribute by(对数据按字段进行分区,交给不同的reduce进行处理)
六.Hive内部表、外部表、分区表
- 内部表:table type=MANAFE_TABLE,删除表时删除元数据和hdfs数据文件
- 外部表:table type=EXTERNAL_TABLE,创建 creare [external] table …,删除表时删除元数据,不会删除hdfs数据文件
- 转换:alter table tablename set tblproperties(‘EXTERNAL’=’TRUE’)
- Location指定源数据,为什么不复制多份源数据? Answer:导致数据冗余,HDFS已有备份机制;都使用外部表分析共享源数据,不影响其他人分析使用
- 分区表功能:将表中数据进行分区,在进行分区检索时,直接加载对应分区的数据
- 创建分区表:create table tablename partitioned by col_name load data …
七.Hive中数据导入与导出
- 加载本地文件到hive:load data local inpath ‘path’ [overwrite] into table table_name
- 加载hdfs文件到hive:load data inpath ‘hdfs_path’into table table_name
- 创建表时通过as select加载:create table table_name as select …
- 创建表时通过location加载:create table_name location ‘path’
- 创建表后insert数据:insert overwrite|into table table_name select …
- Insert导出数据:insert overwrite [local] directory ‘path’ select …
- Hadoop的hdfs命令的get操作导出数据:bin/hdfs -get path
- 执行hive语句:bin/hive -e select * from path
- Import和export命令:export/import table table_name to ‘path’
- 清空表中数据:truncate tablename,不能删除外部表中数据
八.窗口函数(超级重点)
- 窗口函数:可以对分组后的数据进行组内每行的处理
- 格式:Function (arg1,…, argn) OVER ([PARTITION BY <…>] [ORDER BY <…>][ROWS BETWEEN <start_expr> AND <end_expr> ]) Function (arg1,…, argn)表示函数及传入的参数 PARTITION BY <…> 对哪一个字段进行分组,和Group By类似 ORDER BY <…>对哪一个字段数据进行排序,默认为升序 如果不指定ORDER BY,默认从起点到终点
- Function函数: COUNT计数、SUM 求和、AVG 求平均、MIN/MAX 最小/最大(支持ROW BETWEEN) ROW_NUMBER 从1开始,按照顺序,生成分组内每条记录的序列编号 RANK 生成数据项在分组中的排名,排名相等会在名次中留下空位 DENSE_RANK 生成数据项在分组中的排名,排名相等会在名次中不会留下空位 FIRST_VALUE取分组内排序后,截止到当前行,第一个值 LAST_VALUE取分组内排序后,截止到当前行,最后一个值 LEAD用于统计窗口内往后第n行值 LAG 用于统计窗口内往前第n行值 NTILE n切分的片数
- rows between ROWS BETWEEN <start_expr> AND <end_expr>: 如果不指定ROWS BETWEEN,默认从起点到当前行 rows between unbounded preceding and current row 起点到当前 rows between 3 preceding and 1 following 当前行前三行到当前后一行 rows between current row and unbounded following 当前行到终点
- 案例:在emp表中按照每个部门分组显示所有雇员的薪资降序排列并显示序号 Select empno,ename,depeno,sal,ROW_NUMBER() over (partition by depno order by sal desc)as number from emp;
- LEAD函数:lead(col,value2,value3),显示当前行的后value2行的目标列col的值,value3是超出窗口的默认值
- Lag函数:lag(col.value2,value3),显示当前行的前value2行的目标列col的值
- RANK、DENSE_RANK、ROW_NUMBER函数:rank生成数据在分组中排名,排名相等则留空;dense_rank排名相等不留空;row_number生成序号
- 窗口函数和group by区别:窗口函数保留所有进入分区的数据,不去重,可以进行更为复杂个性化的操作
本文转载自: https://blog.csdn.net/m0_73761441/article/details/139604070
版权归原作者 剑亦未配妥 所有, 如有侵权,请联系我们删除。
版权归原作者 剑亦未配妥 所有, 如有侵权,请联系我们删除。