hive极快入门
创建库和表
create database 库名
use 库名
create table 表名
查看库的结构信息
看库
desc database 库名
看表
desc 表名
创建各类型表
内部表
create table huaian_jd
(id int,name string,addr string)
comment 'huaiansh' //备注
row format delimited // 定义分隔符
fields terminated by',' // 定义逗号分隔符
map keys terminated by ':' // 键值对分隔符
location '/user/huaian_jdx' //创建地址
lines terminated by '\n'; //换行分隔符
外部表
create external table stu
(id int,name string,addr string);
分区表
create table stu
(id int,name string,addr string)
partitioned by(grade string);
分桶表
create external table stu
(id int,name string,addr string)
clustered by(id) sorted by (id) into 4 buckets;
视图表
create view huaian_jdk
as select * from huaian_jd;
表数据的插入
本地插入
上传文件到Hadoop或者在Hadoop上创建文件
在hive中
普通表 :load data local inpath '路径' into table 表名
分区表:load data local inpath '路径' into table 表名 partition(grade='AA')
linux中hadoop上数据上传
hadoop dfs -fs -put 文件路径 hadoop保存路径
把Hadoop上的数据插入表中
load data inpath '路径' into table 表名
分区表数据插入
insert into table huaian_jdex partition(grade = 'AA') select id,name,addr from huaian_jdps;
创建表的同时导入数据
create table stu
as select * from stub;
多重分区表导入数据
load data local inpath '路劲' overwrite into table 表名
表结构复制
create table stu like stub;
数据导出
mkdir /root/cxl
insert overwrite local directory '/root/cxl'
select * from stub;
import export数据导出导入
导出到hdfs上
export table stub to '路径';
复制表结构
create table huaian_js like stub
将导出在数据导入进来
import table huaian_js from '路径'
注意在对分桶分区表导入数据的时候要打开非限制权限
分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
分桶
set hive.enforce.bucketing=true;
set mapreduce.job.reduces=-1;
把插入数据清空
truncate table 表名;
对表进行一系列操作
更改表名
alter table 旧名 rename to 新表名
更改表属性
alter table 表名 settblproperties(旧的属性=新的)
增加分区和字段
alter table 表名 add partition(grade='AA')
alter table 表名 add columns(字段 字段类型)
删除分区和字段
alter table 表名 drop partition(grade='AA')
alter table 表名 drop 字段
内部表变成外部表
alter table stu tblproperties('EXTERNAL'='true')
看修改后表结构
desc formatted stu;
外部表变成内部表就是把括号的ture改成flase
修改列
alter table 表名 change column 旧的列名 新的列名 新的列名字段类型
常用函数
求总数(count)
求最大值(max)
求最小值 (min)
求总和 (sum)
求平均值 (avg)
用法 :select count(*) 字段 from 表名;
limit 用于限制查询行数
select * from 表名 limit 5;
where 语句用法
select * from 表名 where 条件
like和rlike(%代表0个或者多个字符,_ 代表一个字符)
select * from 表名 where 字段 like '2%' // 2%是查找以2开头的数据信息
select * from 表名 where 字段 rlike '[2]' //[2]是查找包含2的数据
group by (用于按照一个或者多个列队结果进行分组,然后对每个组进行聚合)
eg.计算表中每个学校的平均工资
select * from t.gz, avg(gz) avg_gz from 表名 t group by t.gz;
其中t.gz是查询的字段,avg(gz)是查询要求平均数的字段,avg_gz 模糊查询
重点难点(建议大家操作学习,看有点难理解)
join语句
首先创建两张表dep和emp并插入数据结果如下面表格(两张表是分开的,左边为一个右边为一个)
e.empno | e.ename | d.deptno | d.dname |
18999065 | 张三 | 100 | 数学系 |
18000706 | 李四 | 500 | 软件系 |
19899912 | 王鹏 | 300 | 数学系 |
18223456 | 老刘 | 200 | 物理系 |
等值连接
合并两张表如上图:
select e.empno,e.ename,d.deptno,d.dname from demp e join dept d on e.deptno = d.deptno;
//模板:select (表中所有的字段) from 第一张表名 e join 第二张表名 d on 第一张表字段=第二张表字段
链接表(内连接、左右外连接、满连接、左半连接、多表连接),用对应的关键字来连接,红色为关键字
内连接 //满足条件则合并保留
select e.empno,e.ename,d.deptno from demp e inner join dept d on e.deptno = d.deptno;
满外连接 //满足操作符join的表中所有符合where的所有记录将被返回
select e.empno,e.ename,d.deptno,d.dname from demp e full join dept d on e.deptno = d.deptno;
左右连接 //满足操作符join的左或右表中所有符合where的所有记录将被返回
select e.empno,e.ename,d.deptno,d.dname from demp e left(right) outer join dept d on e.deptno = d.deptno;
左半连接 //将返回左边表的记录,,前提是记录对右边表满足On语句中的判断条件
select e.empno,e.ename,d.deptno,d.dname from demp e left semi join dept d on e.deptno = d.deptno;
排序
排序有order by,sort by,distribute by,cluster by等四种
order by 为全局排列
创建emp表如图
ename | gender | bday | area | score | deptno |
张三 | 男 | 1998-12-10 | 上海 | 98.0 | 100 |
小美 | 女 | 2001-1-1 | 沈阳 | 76.0 | 200 |
小芳 | 女 | 2003-5-6 | 大连 | 82.0 | 100 |
李四 | 男 | 1999-8-8 | 北京 | 60.0 | 300 |
老王 | 男 | 1999-7-3 | 上海 | 59.0 | 200 |
小雨 | 女 | 2004-6-6 | 沈阳 | 70.0 | 100 |
老刘 | 男 | 2000-5-5 | 大连 | 66.0 | 200 |
查询学生信息按部门升序
select (表中所有字段) from 表名 order by 要排序的字段
降序
select (表中所有字段) from 表名 order by 要排序的字段 desc
字段别名排序
重命名一个字段,然后对重命名字段进行排序
eg.按照学生成绩的2倍排序:
select ename,score*2 tscore from emp order by tscore;
//tscore是新字段名
多字段排序
select ename,deptno,scroe from emp order by deptno,score;
sort by 为内部排序
查看表信息和order by 一样
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjkekf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01