Hive的几种常见的数据导入方式

Hive的几种常见的数据导入方式,第1张

零.Hive的几种常见的数据导入方式

常用的的有三种:

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

2.从HDFS上导入数据到Hive表;

3.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。

Hive配置:

HDFS中Hive数据文件存放目录(启动hive后HDFS自动创建):

HDFS: /usr/hive/warehouse

hadoop fs -mkdir /usr/hive/warehouse 命令创立

本地数据存放目录:

本地:/home/santiago/data/hive

一.从本地文件系统中导入数据到Hive表

1.在hive中建表

hive>show databases

OKdefaultTime taken: 1.706 seconds, Fetched: 1 row(s)

hive>create table guo_test(Name string,String string)

>row format delimited

>fields terminated by ','

>stored as textfile;

hive>show tables

OK

guo_test

Time taken: 0.024 seconds, Fetched: 1 row(s)123456789101112

2.在本地文件建立同类型数据表

santi@hdp:~/data/hive$ ls

hive_test.txt

santi@hdp:~/data/hive$ cat hive_test.txt

santi,you are a zhazha.1234

3.导入数据并测试

hive>load data local inpath '/home/santi/data/hive/hive_test.txt' into table guo_test

hive>select * from guo_test

hive>dfs -ls /usr/hive/warehouse/guo_test

#hadoop fs -ls /usr/hive/warehouse

Found 1 items

drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13

/usr/hive/warehouse/guo_test12345678

发现hive-site,xml设置的HDFS文件存储位置中多了guo_test这个文件夹

#hadoop fs -ls /usr/hive/warehouse/guo_test

Found 1 items-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13

/usr/hive/warehouse/guo_test/hive_test.txt

hive>select * from guo_test

OK

santi you are a zhazha.12345678

在该文件夹中找到了所写入hive数据仓库的文件。

[注]本地数据写入成功,但是从本地将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/santi/),然后再将数据从临时目录下移动到对应的Hive表的数据目录里面(临时目录不保留数据)。

二.从HDFS文件系统中导入数据到Hive表

1.在HDFS文件系统上建立数据文件

hdfs上没有vim命令,则需要将本地数据文件手动传入到HDFS上

/data/hive# vim data_HDtoHive/data/hive# cat data_HDtoHivedata from, HDFS to Hive #hadoop fs -put /home/santi/data/hive/data_HDtoHive /usr/data/input//数据传入# hadoop fs -ls /usr/data/input12345

2导入数据

hive>load data inpath '/usr/data/input/data_HDtoHive' into table guo_test

hive>select * from guo_test

OK

data fromHDFS to Hive

santi you are a zhazha.

Time taken: 0.172 seconds, Fetched: 2 row(s)123456

数据写入成功

数据存hive配置的数据存储位置中。

[注]

从本地导入数据语句为

hive>load data local inpath ‘/home/santi/data/hive/hive_test.txt’ into table guo_test

从HDFS中导入数据的语句为

hive>load data inpath ‘/usr/data/input/data_HDtoHive’ into table guo_test

差距在local这个命令这里。

而从HDFS系统上导入到Hive表的时候,数据转移。HDFS系统上查找不到相关文件。

三.从HIVE表选取数据插入新的HIVE表

命令为create table 表名 as selecr xxx from 表名。

hive>create table hivedata_test1

>as

>select name

>from guo_test

hive>select * from hivedata_test1

OK

data fromsanti

Time taken: 0.116 seconds, Fetched: 2 row(s)123456789

[注]hive是分区表有稍微区别

在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比表有a和b两个分区,则对应a=xxx,b=xx对应表的目录为/user/hive/warehouse/a=xxx

user/hive/warehouse/b=xx,所有属于这个分区的数据都存放在这个目录中。

hive>create table hivedata_test2(

>Name string)

>partitioned by

>(String string)

>ROW FORMAT DELIMITED

>FIELDS TERMINATED BY ','>STORED AS TEXTFILE

hive>insert into table hivedata_test2

>partition(String='best')

>select Name

>from guo_test

hive>select * from hivedata_test2

OK

data from best

santi best

Time taken: 1.549 seconds, Fetched: 2 row(s)# hadoop fs -ls /usr/hive/warehouse/hivedata_test2Found 1 items

drwxrwxr-x -santiago supergroup 0 2017-02-14 17:40

/usr/hive/warehouse/hivedata_test2/string=best

将存放在excel表中的数据如何导入到hive中,首先前提是excel表中数据类型以及长度要和hive仓库中表的字段属性一致,否则会报异常。其次因为建表的时候,已经定义了表的分割符号(row format delimited fields terminated by ‘,’),所以不能直接将excel表格中数据导入的hive仓库中。处理方式如下:

先将excel表中数据另存转化为data.csv格式,转化为.csv格式的文件默认就是用“,”进行分割的,可以用notepad++打开data.csv格式查看。然后再讲数据导入到hive仓库中即可。但是执行如下导入语句时,发现报错,显示Wrong file format。

检查以后发现,因为在创建表格时,使用的是RCFILE存储格式

STORED AS   INPUTFORMAT   'org.apache.hadoop.hive.ql.io.RCFileInputFormat'

OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'

而导入到是TextFile文件格式,所以报错,解决办法建表的格式默认使用TextFile格式即可。

如何将文件转化为rcfile文件格式:

(1)hive 中直接 通过textfile表进行insert转换,比如通过如下将textfile数据导入到rcfile中。

insert overwrite table http_RCTable partition(dt='2013-09-30') select p_id,tm,idate,phone from tmp_testp where dt='2013-09-30'

(2)使用mapreduce将普通的文件压缩成RCFile,并且再读取RCFile文件。

输入配CSV input,输出配Hive output。

需要注意:在CSV input中针对那个日期字段,要配置数据格式:yyyyMMdd HH:mm:ss

java.util.Date日期格式为:年月日时分秒

java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]

java.sql.Time日期格式为:时分秒

java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)

loader 提供的时间格式如下:

date是年月日,

time是时分秒,

timestamp是年月日时分秒


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11685155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存