hive表导入数据的几种方式

目录

一、通过LOAD DATA 命令

1、不指定分区

1)、从本地文件系统中导入数据到Hive表

2)、从HDFS上导入数据到Hive表

2、指定分区

二、把select查询的结果插入到指定的表中

1、静态分区导入

2、动态分区导入

3、多表插入

三、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中create table .. as select

四、把数据文件直接挂载到hive表的hdfs目录下


创建一个简单的hive表

create table test(
id int, name string,tel string)
partitioned by (age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

一、通过LOAD DATA 命令

LOAD DATA (LOCAL )INPATH ... (OVERWRITE) INTO TABLE  tablename

LOCAL :有这个关键字说明是本地的文件,没有的话说明是hdfs上的文件;

OVERWRITE:有这个关键字说明是是覆盖,没有的话是追加;

1、不指定分区

1)、从本地文件系统中导入数据到Hive表

LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE test; 

使用LOCAL代表的是本地目录下的文件

从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/user/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里 面。

2)、从HDFS上导入数据到Hive表

而不带LOCAL的则表示使用的是Hadoop上的HDFS上路径下的文件,如

LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE test;

2、指定分区

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE test PARTITION (ds='2008-08-15');

分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应 的目录中。比如test表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive /warehouse/dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。

二、把select查询的结果插入到指定的表中

1、静态分区导入

insert into table test partition (age='25') select id, name,tel from test1;

把test1表的数据按照分区age来导入,这种方式称为静态分区;

2、动态分区导入

insert into table test partition (age) select id, name,tel,age from test1;

这种方法叫做动态分区插入,但是Hive中默认是关闭的,所以在使用前需要先把hive.exec.dynamic.partition.mode设置为 nonstrict。

3、多表插入

Hive还支持多表插入在Hive中,我们可以把insert语句倒过来,把from放在最前面,它的执行效果和放在后面是一样的,如下:

from test
insert into table test1 partition(age)   select id, name, tel, age
insert into table test2   select id, name where age>25;

 

三、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中create table .. as select

在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将Hive的查询输出结果直接存在一个新的表中是非常方便的,我们称这种情况为CTAS(create table .. as select)如下:

create table test4 as  select id, name, tel from test;

四、把数据文件直接挂载到hive表的hdfs目录下

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值