Hive零基础从入门到实战 入门篇(十)HiveQL:将csv文件中的数据导入Hive

目录

 

前言

1. 数据装载 Load

1.1 filepath

1.2 LOCAL

1.3 OVERWRITE

1.4 PARTITION

1.5 举例


 

前言

本文介绍如何将文件中的数据导入Hive表中。

 

1. 数据装载 Load

将文件中的数据导入Hive中要使用Load关键字,具体完整语法如下,[ ]中的均为可选项:

load data [local] inpath 'filepath' [overwrite]
into table tablename [partition (partcol1=val1, partcol2=val2 ...)]

Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。

 

1.1 filepath

filepath 可以是: 

相对路径,例如:project/data1 

绝对路径,例如: /user/hive/project/data1 

包含模式的完整 URI,例如:hdfs://namenode:9000/user/hive/project/data1 

 

1.2 LOCAL

如果指定了 LOCAL,那么: 
load 命令会去查找本地文件系统中的 filepath,并将 filepath 中的文件复制到目标文件系统中。

如果发现filepath是相对路径,则路径会被解释为相对于当前用户的当前路径。

用户也可以为本地文件指定一个完整的 URI,比如:file:///user/hive/project/data1,建议使用绝对路径

如果没有指定 LOCAL 关键字,那么会去查找HADOOP分布式文件系统(HDFS)中的 filepath,一般不使用,有兴趣的同学自行百度即可。

语法如下:

load data local inpath 'filepath' [overwrite]
into table tablename [partition (partcol1=val1, partcol2=val2 ...)]

 

1.3 OVERWRITE

如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的内容(如果有)会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。 

语法如下:

load data [local] inpath 'filepath' overwrite
into table tablename [partition (partcol1=val1, partcol2=val2 ...)]

 

1.4 PARTITION

加载的目标可以是一个表或者分区。如果表包含分区,必须指定每一个分区的分区名。

如果要插入数据的目标表没有分区,语法如下:

load data [local] inpath 'filepath' [overwrite]
into table tablename

如果要插入数据的目标表有分区,必须指定具体的分区,语法如下:

load data [local] inpath 'filepath' [overwrite]
into table tablename partition (partcol1=val1, partcol2=val2 ...)
 

 

1.5 举例

这里我来示范将三个位于Linux本地文件系统的csv文件导入表t_od_use_cnt的三个分区中,注意建表时要使用前文中以英文逗号分隔的建表语句,因为csv文件的列间隔符是逗号。如果导入以tab为间隔的txt文件,建表时以‘\t’作为间隔符。

1.首先下载三个csv文件

百度网盘:链接:https://pan.baidu.com/s/1lNO6r4-qCtqbyoYK7FIhVQ 
提取码:wvg9 
 

2. 建立一个存放数据文件的目录

命令如下:

mkdir -p /root/hive_practice_data/t_od_use_cnt

3. 上传文件至该目录中

Hive零基础从入门到实战 入门篇(十)HiveQL:将csv文件中的数据导入Hive_第1张图片

在左边找到下载的三个csv文件,右边进入新建的目录/root/hive_practice_data/t_od_use_cnt中。

选中三个csv文件,右键点击Transfer

Hive零基础从入门到实战 入门篇(十)HiveQL:将csv文件中的数据导入Hive_第2张图片

成功后效果如下:

Hive零基础从入门到实战 入门篇(十)HiveQL:将csv文件中的数据导入Hive_第3张图片

回到命令行界面查看新导入的文件

[root@hadoop ~]# cd hive_practice_data/t_od_use_cnt
[root@hadoop t_od_use_cnt]# ll
total 72
-rw-r--r-- 1 root root 17848 May  4 17:33 20190101.csv
-rw-r--r-- 1 root root 23166 May  4 17:33 20190102.csv
-rw-r--r-- 1 root root 26750 May  4 17:33 20190103.csv
[root@hadoop t_od_use_cnt]# head 20190101.csv 
1,1.5,10000,6,1
2,1.3,10001,49,1
2,1.5,10002,23,1
2,1.2,10003,1,0
1,1.2,10004,29,1
1,1.5,10005,15,1
2,1.4,10006,12,1
1,1.2,10007,40,1
1,1.3,10008,25,1
1,1.1,10009,40,1
[root@hadoop t_od_use_cnt]# head 20190102.csv 
1,1.4,10200,46,1
1,1.3,10201,13,1
2,1.2,10202,31,1
1,1.5,10203,18,1
2,1.2,10204,30,1
1,1.3,10205,47,1
1,1.4,10206,39,1
2,1.4,10207,46,1
2,1.2,10208,26,1
1,1.5,10209,39,1
[root@hadoop t_od_use_cnt]# head 20190103.csv 
2,1.2,10400,40,1
2,1.3,10401,28,1
1,1.2,10402,32,1
1,1.2,10403,41,1
2,1.2,10404,5,1
2,1.4,10405,50,1
2,1.1,10406,24,1
1,1.5,10407,50,1
1,1.4,10408,3,0
1,1.4,10409,5,1
[root@hadoop t_od_use_cnt]# 

4. 启动Hive,将三个csv文件分别导入表t_od_use_cnt的三个对应的时间分区中,命令如下:

load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190101.csv' 
into table t_od_use_cnt partition (date_8=20190101);

load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190102.csv' 
into table t_od_use_cnt partition (date_8=20190102);

load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190103.csv' 
into table t_od_use_cnt partition (date_8=20190103);

若插入成功,运行效果如下:
 

hive> load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190101.csv' 
    > into table t_od_use_cnt partition (date_8=20190101);
Loading data to table app.t_od_use_cnt partition (date_8=20190101)
Partition app.t_od_use_cnt{date_8=20190101} stats: [numFiles=1, numRows=0, totalSize=17848, rawDataSize=0]
OK
Time taken: 3.748 seconds
hive> load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190102.csv' 
    > into table t_od_use_cnt partition (date_8=20190102);
Loading data to table app.t_od_use_cnt partition (date_8=20190102)
Partition app.t_od_use_cnt{date_8=20190102} stats: [numFiles=1, numRows=0, totalSize=23166, rawDataSize=0]
OK
Time taken: 1.801 seconds
hive> load data local inpath '/root/hive_practice_data/t_od_use_cnt/20190103.csv' 
    > into table t_od_use_cnt partition (date_8=20190103);
Loading data to table app.t_od_use_cnt partition (date_8=20190103)
Partition app.t_od_use_cnt{date_8=20190103} stats: [numFiles=1, numRows=0, totalSize=26750, rawDataSize=0]
OK
Time taken: 0.727 seconds
hive> 

 

5. 使用select语句查看插入表中的数据

这里需要使用select查询语句验证数据是否成功插入,具体语法会在后续博文中介绍。这里分别查询每个分区的前5条数据,命令如下:

select * from t_od_use_cnt where date_8 = 20190101 limit 5;

select * from t_od_use_cnt where date_8 = 20190102 limit 5;

select * from t_od_use_cnt where date_8 = 20190103 limit 5;

运行效果如下:

hive> select * from t_od_use_cnt where date_8 = 20190101 limit 5;
OK
1	1.5	10000	6	1	20190101
2	1.3	10001	49	1	20190101
2	1.5	10002	23	1	20190101
2	1.2	10003	1	0	20190101
1	1.2	10004	29	1	20190101
Time taken: 2.129 seconds, Fetched: 5 row(s)
hive> select * from t_od_use_cnt where date_8 = 20190102 limit 5;
OK
1	1.4	10200	46	1	20190102
1	1.3	10201	13	1	20190102
2	1.2	10202	31	1	20190102
1	1.5	10203	18	1	20190102
2	1.2	10204	30	1	20190102
Time taken: 0.236 seconds, Fetched: 5 row(s)
hive> select * from t_od_use_cnt where date_8 = 20190103 limit 5;
OK
2	1.2	10400	40	1	20190103
2	1.3	10401	28	1	20190103
1	1.2	10402	32	1	20190103
1	1.2	10403	41	1	20190103
2	1.2	10404	5	1	20190103
Time taken: 0.217 seconds, Fetched: 5 row(s)
hive> 

 


能看到这里的同学,就右上角点个赞顺便关注我吧,3Q~

你可能感兴趣的:(Hive零基础从入门到实战 入门篇(十)HiveQL:将csv文件中的数据导入Hive)