hive的基本使用(2)

本文详细介绍了Hive的四种表类型:内部表、外部表、分区表和桶表,包括它们的特点和使用场景。重点讲述了如何加载数据,如使用`LOAD DATA`命令从本地或HDFS加载数据。此外,还涵盖了Hive的查询语法,如`ORDER BY`、`SORT BY`、`DISTRIBUTED BY`和`CLUSTERED BY`的排序方式。最后,讨论了Hive的参数设置和自定义函数的创建过程。
摘要由CSDN通过智能技术生成

hive的四种表的类型

hive当中的常见的表模型:

第一种表模型:管理表,又叫做内部表 删除表的时候,hdfs上面对应的数据,同步删除

hive当中的默认分隔符: \001 键盘打不出来 asc码值 非打印字符 避免分隔符的冲突

创建表指定字段之间的分隔符,指定数据的存储格式,指定数据的存放位置:

create  table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t' stored as textfile location '/user/stu2';

根据查询结果创建表,复制表结构,并且复制表数据到我们创建的表里面去:

 create table stu3 as select * from stu2;

仅仅复制表结构,不复制表数据:

create table stu4 like stu2;

查看表的类型:

desc formatted  tableName;

第二种外部表:删表的时候不会删除hdfs上面的数据
指定hdfs其他位置的路径的数据,加载到hive的表当中来
hive认为数据是从其他地方移动过来的,hive表没有完全的独占这份数据,删除表的时候不能够删除数据

location /user/hive/warehouse/myhive.db/stu5
/myhive/datas/a.txt

创建外部表(例):
创建老师表:

 create external table techer (t_id string,t_name string) row format delimited fields terminated by '\t';

创建学生表:

 create external table student (s_id string,s_name string,s_birth string , s_sex string ) row format delimited fields terminated by '\t';

加载数据

从本地文件系统向表中加载数据:

 load data local inpath '/export/servers/hivedatas/student.csv' into table student;

加载数据并覆盖已有数据:

load data local inpath '/export/servers/hivedatas/student.csv' overwrite  into table student;

内部表与外部表的创建:

external关键字决定了我们是内部表还是外部表

内部表:删表的时候,同时删除hdfs的数据
外部表:删表的时候,不会删除hdfs上面的数据

外部表:
本地磁盘:local
hdfs文件系统:不加local
加载数据:
load data [local] inpath ‘/export/servers/hivedatas/techer.csv’ into table techer ;

从本地加载数据的时候:本地数据没有动
从hdfs上面加载数据的时候:把数据移动到了我们hive表的location位置
如果没有指定location位置,那么默认表的位置在 /usr/hive/warehouse/dbname/tablename


第三种分区表:一般没有一种独立的表模型,只有内部分区表,或者外部分区表
核心的思想,也是分治:数据量越少,跑起来就会越快
可以按照一定的规则,创建一些文件夹,可以根据指定的文件夹,找到我们指定的数据
/user/hive/warehouse/myhive.db/score/month=201808
/user/hive/warehouse/myhive.db/score/month=201809
/user/hive/warehouse/myhive.db/score/month=201810

分区表加载数据的语法
加载数据到分区表中
load data local inpath ‘/export/servers/hivedatas/score.csv’ into table score partition (month=‘201806’);

加载数据到一个多分区的表中去
load data local inpath ‘/export/servers/hivedatas/score.csv’ into table score2 partition(year=‘2018’,month=‘06’,day=‘01’);

第四种表模型 桶表 一般也是与内部表或者外部表搭配使用
可以将我们的数据按照一定的规则,划分成多个文件里面去
分桶表我们指定某一个字段进行分桶,其实就是将这个字段运行了一把mr的程序,以这个字段作为key2,
应用mr的分区规则(HashParttiioner) 通过多个reducer输出多个文件

开启桶表:

  set hive.enforce.bucketing=true;

设置MapReduce:

 set mapreduce.job.reduce=3;

使用insert overwrite的方式将普通表的的数据通过查询方式加到桶表当中:

 create table course(c_id string,c_name string ,t_id string) clustered by (c_id) into 3 buckets row for format delimited fields terminated by '\t' ;

 insert overwrite table course select * from course_common cluster by(c_id );

hive当中的数据加载:
这两种加载数据的方式,一定要掌握

 load  data  [local]  inpath   .....................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值