• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

hive极快入门

武飞扬头像
苏.辞
帮助1

创建库和表


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
系列文章
更多 icon
同类精品
更多 icon
继续加载