
常用的的有三种:
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
Hive中可以通过hive-hbase-handler建立指向HBase表的外部表,通过在Hive中往该外部表insert数据,即可完成向HBase中插入数据。你可以搜索"lxw的大数据田地 hive
hbase整合",里面有文章介绍Hive和HBase的整合。
Map使用建表:
[plain] view plaincopy
hive>create table employee(id string, perf map<string, int>)
>ROW FORMAT DELIMITED
>FIELDS TERMINATED BY '\t'
>COLLECTION ITEMS TERMINATED BY ','
>MAP KEYS TERMINATED BY ':'
OK
Time taken: 0.144 seconds
‘MAP KEYS TERMINATED BY’ :key value分隔符
导入数据:
[plain] view plaincopy
$ cat test7.txt
1 job:80,team:60,person:70
2 job:60,team:80
3 job:90,team:70,person:100
hive>LOAD DATA LOCAL INPATH '/home/work/data/test7.txt' INTO TABLE employee
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)