Hive的基本操作:外表与内表,静态分区表和动态分区表

一、内部表

hive默认创建的是内部表,内部表也称为管理表或临时表(managed table),hive控制着整个表的生命周期,当删除一张表的时候表中的数据也会相应删除。

内部表的存储位置是hive.metastore.warehouse.dir(默认是:/user/hive/warehouse)

缺点:在实际开发中,内部表不方便和其他工作共享数据,hive在设计之初就不允许共享管理表中的数据,hive提供了外部表。

操作

1、创建一个数据库:create database train;
2、使用train数据库:use train;
3、在数据库train中创建一个person表:

create table person(
 id int,
name string,
age int)
row format delimited fields terminated by ',';

4、查看数据库hive的信息: desc database train;
5、上传数据到创建的person表中: 

dfs -put /opt/person.txt /user/hive/warehouse/train.db/person;
6、显示当前数据库:set hive.cli.print.current.db=true;
查看表:select * from person;
7、显示表的行头信息:set hive.cli.print.header=true;
8、查看表: select * from person;

二、外部表

外部表中的数据生命周期不受hive控制,而且可以与其他外部表进行数据共享。

外部表数据的存储位置由自己制定。

Hive中内表与外部表的区别:

1.在导入数据到外部表,数据并没有移动到自己的数据仓库目录下(如果指定了location的话),也就是说外部表中的数据并不是由它自己来管理的,而内部表则不一样;

2.在删除内部表的时候,hive将会把属于表的元数据和数据全部删除;而删除外部表的时候,hive仅仅删除外部表的元数据,数据是不会删除的;

3.在创建内部表或外部表时加上location效果是一样的,只不过表目录的位置不同而已,加上partition用法也一样,只不过表目录下会有分区目录而已,load data local inpath 直接把本地文件系统的数据上传到HDFS上,有location上传到location指定的位置上,没有的话上传到hive默认配置的数据仓库中。

4.对内部表的修改会将修改直接同步给元数据,而对外部表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name)

 操作

 create external table external_table(

id int,

name string,

 age int)

row format delimited fields terminated by ','

location '/user/root/external/external_person';

dfs -put /opt/person.txt /user/root/external/external_person;

select * from external_table;

show tables;

在删除内部表的时候,hive将会把属于表的元数据和数据全部删除;而删除外部表的时候,hive仅仅删除外部表的元数据,数据是不会删除的;

 

 三、分区表

 在创建分区表之前要先创建一个数据库存放数据(创建了一个taitan的数据库和tidanic的表,并上传了数据) 

操作:

 create database taitan;

use taitan;

set hive.cli.print.current.db=true;

create table tidanic(

passengerId int,

survived int,

pclass int,

name string,

sex string,

age int,

sibsp int,

parch int,

ticket string,

fare double,

cabin string,

embarked string)

row format delimited fields terminated by ',';

dfs -put /opt/train.csv /user/hive/warehouse/taitan.db/tidanic;

select * from tidanic;

drop table tidanic;

create table tidanic1(

passengerid int,

survived int,

pclass int,

name string,

sex string,

age int,

sibsp int,

parch int,

ticket string,

fare double,

cabin string,

embarked string)

row format delimited fields terminated by ',';

上传数据:dfs -put /opt/train.csv /user/hive/warehouse/taitan.db/tidanic1;

 静态分区表的创建:

create table tidanic1_part(

passengerid int,

survived int,

pclass int,

name string)

partitioned by(gender string)

row format delimited fields terminated by ',';

insert overwrite table tidanic1_part partition (gender='female') select passengerid,survived,pclass,name from tidanic1 where sex='female';

insert overwrite table tidanic1_part partition (gender='male') select passengerid,survived,pclass,name from tidanic1 where sex='male';

错误:

 可以设置hive成本地模式来执行任务试试:

 set hive.exec.mode.local.auto=true;

 三、 动态分区表

操作:

hive (taitan)> set hive.exec.dynamic.partition=true;

hive (taitan)> set hive.exec.dynamic.partition.mode=nostrict;

hive (taitan)>create table tidanic_dynamic_part(

passengerid int,

survived int,

name string)

 partitioned by(passengerclass string)

row format delimited fields terminated by ',';

hive (taitan)> set hive.exec.mode.local.auto=true;

hive (taitan)> insert overwrite table tidanic_dynamic_part partition(passengerclass) select passengerid,survived,name,pclass from tidanic;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值