将本地文件导入到Hive表中(支持 TEXTFILE 、ORC 等存储格式)

1、hive表格式为TEXTFILE

由于 TEXTFILE 格式没有对数据进行压缩,因此直接 load 即可。

假设本地有一个文件 test_person.txt,内容为:

Gong	24
Tian	23

想要将其导入到 TEXTFILE 格式的 tmp_test_person_txt 表内,步骤如下:

1.1、创建目标表,格式为 TEXTFILE

在 hive 命令行下,输入建表语句:

CREATE TABLE tmp.tmp_test_person_txt(name string, age int) 
row format delimited fields terminated by '\t'
STORED AS TEXTFILE
location '/user/recsys/srbi/tmp.db/tmp_test_person_txt';

1.2、加载本地文件

任选以下两种方法之一即可:

(1)在 linux 命令行下,将本地文件复制到 hive 表所在路径下:

$ hadoop fs -put ~/test_person.txt /user/recsys/srbi/tmp.db/tmp_test_person_txt

(2)在 hive 命令行下,将本地文件加载到 hive 表中:

hive> load data local inpath '~/test_person.txt' into table tmp.tmp_test_person_txt;
Loading data to table tmp.tmp_test_person_txt
Table tmp.tmp_test_person_txt stats: [numFiles=1, totalSize=16]
OK
Time taken: 1.536 seconds

默认是追加,如果想覆盖,则使用

load data ... OVERWRITE into table ...

1.3、导入成功

可以查看是否已经成功导入数据:

hive> select * from tmp.tmp_test_person_txt;
OK
Gong	24
Tian	23
Time taken: 0.544 seconds, Fetched: 2 row(s)

2、hive表格式为ORC

存储格式为 ORC 的 hive 表,不能直接 load 文件,因为 ORC 格式的数据是有压缩操作的,并不是常规的格式。

可以使用曲线救国方式,建立一个临时表,字段相同,但是存储格式是 TEXTFILE 的,这样就可以使用上面的方法加载本地文件了,然后使用 hive 表的操作命令 insert into table ... select ... 来实现两个表之间的数据复制。

操作如下:

2.1、创建两个表,格式为分别为 ORC 和 TEXTFILE

在 hive 命令行下,输入建表语句:

hive> CREATE TABLE tmp.tmp_test_person_txt(name string, age int) 
    > row format delimited fields terminated by '\t'
    > STORED AS TEXTFILE
    > location '/user/recsys/srbi/tmp.db/tmp_test_person_txt';
hive> CREATE TABLE tmp.tmp_test_person_orc(name string, age int) 
    > row format delimited fields terminated by '\t'
    > STORED AS ORC
    > location '/user/recsys/srbi/tmp.db/tmp_test_person_orc';

2.2、加载本地文件至 TEXTFILE

使用 1.2 节的方法,将本地文件导入到 TEXTFILE 格式的 tmp_test_person_txt 表中。

2.3、将 TEXTFILE 的数据复制到 ORC 中

在 hive 命令行下:

INSERT INTO TABLE tmp_test_person_orc SELECT * FROM tmp_test_person_txt;

2.4、导入成功

可以查看是否已经成功导入数据:

hive> select * from tmp.tmp_test_person_orc;
OK
Gong	24
Tian	23
Time taken: 0.544 seconds, Fetched: 2 row(s)

3、其他格式

其他存储格式如 SEQUENCEFILE、PARQUET 等,都可以按照 ORC 格式那样,先导入到 TEXTFILE 表,再进行两个表之间的数据转移即可。

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值