数据分析之hive
hive学习笔记:
一、hive基本指令:
hive 进入hive窗口指令(启动hive之前必须启动集群):
退出hive窗口:
exit;
quit;
二、hive数据类型:
hive数据类型与Java相似,与MySQL的区别没有varchar类型,有的是string类型(储存字符串);
类型转化用 cast函数 【Cast(字段名 as 转换的类型 )】
1、hive的原子数据是可以进行隐式转换的;
隐式转换的规则如下:
(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成
INT,INT 可以转换成 BIGINT。
(2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。
(3)TINYINT、SMALLINT、INT 都可以转换为 FLOAT。
(4)BOOLEAN 类型不可以转换为任何其它的类型。
二、DDL
1)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)
create database if not exists db_hive;
2)创建一个数据库,指定数据库在 HDFS 上存放的位置 [使用location关键字]
create database db_hive2 location '/db_hive2.db';
3)查看库或表的基本语句
show databases;
show tables;
#可以在查询数据库的时候加上过滤 【show databases like '%a%'】
显示数据库信息
desc database [库名]
显示详细信息
desc database extended [库名]
4)切换数据库使用use关键字
5)删除数据库 :
drop database [库名]
#判断数据库是否存在 if exists
drop database if exists [库名];
#如果数据库不为空 需要强制删除 采用cascade命令
drop database [库名] cascade;
6)创建表:
create table [if not exists][表名](字段名,字段属性....) row format delimited fields terminated by ',';
7)修改表
alter tale [表名] rename to [新表名]
8)查询表结构:
desc [表名]
9)删除表:
drop table [表名]
三、DML
1、向表中导入数据
load data [local] inpath '数据路劲'[overwrite] into table [表名]
(1)load data:表示加载数据
(2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
2、通过查询语句向表中插入数据(Insert)
insert into/overwrite table [表名1] select id,name from [表名2]
#insert into:以追加数据的方式插入到表或分区,原有数据不会删除 insert overwrite:会覆盖表中已存在的数据
3、查询语句中创建表并加载数据(As Select)
根据查询结果创建表(查询的结果会添加到新创建的表中)
create table if not exists [表名] as select id, name from [表名];
4、数据导出
Insert 导出
1)将查询的结果导出到本地
insert overwrite local directory '/opt/module/hive/data/export/student' select * from [表名];
2)将查询的结果格式化导出到本地
insert overwrite local directory '/opt/module/hive/data/export/student1' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from [表名];
3)将查询的结果导出到 HDFS 上(没有 local)
insert overwrite directory '/user/atguigu/student2' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from [表名];
5、清除表中数据
truncate table [表名];
6、常用函数
1)求总行数(count)
select count(*) cnt from [表名];
2)求工资的最大值(max)
select max(sal) max_sal from [表名];
3)求工资的最小值(min)
select min(sal) min_sal from [表名];
4)求工资的总和(sum)
select sum(sal) sum_sal from [表名];
5)求工资的平均值(avg)
select avg(sal) avg_sal from [表名];
7、Limit语句
limit语句用于限制返回行数
select * from [表名]limit 5;
8、Where语句
where语句用于筛选过滤;
select * from [表名] where [条件];
9、Like和Rlike
like 选择条件可以包含字符或者数字
%代表0或者多个 _代表一个字符
select * from [表名] where [列名] like 'a%'; //匹配以a开头的数据
select * from [表名] where [列名] like ’_a%'; //匹配第二个字母为a
Rlike是hive中like的扩展 可以超过正则表达式来匹配条件
select * from [表名] where [列名] rlike ’[a]'; //匹配带a的信息
10、Group by 语句
group by语句常常和聚合函数一起使用 按照一个或者多个列结果进行分组 然后对每个组执行聚合操作
select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;
11、排序
order by 全局排序 只有一个reduce
使用order by 排序 ASC :升序(默认) Desc:降序
select * from [表名] order by sal;
select * from [表名] order by sal desc;
四、函数
1、系统内置函数
1)查看系统内置函数 show function;
2)显示自带的函数用法 desc function 【函数】
3)详细显示自带函数 desc function extebded 【函数】
2、常用函数
1)空字段赋值 nvl()
select nvl(字段名,值) from 【表名】
2)行转列 concat()
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将
为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 Array 类型字段。
3、自定义函数
UDF 继承UDF类
实现evaluate方法
上一篇: mysqldb查询大量数据
下一篇: mysqldb查询大量数据
推荐阅读