Hive学习(二)-数据导入及导出

来源:互联网 发布:大堀惠 知乎 编辑:程序博客网 时间:2024/05/18 23:13

首先,要知道HIve中表的列(field)是以何种方式分隔的。


Hive表中默认的记录何字段分割符

分隔符描述\n对于文本文件来说,每行都是一条记录,因此换行符可以进行分隔^A(Ctrl+A)用于分隔字段(列),在create table语句中可以使用八进制编码\001表示^B用于分隔ARRAY或者struct中的元素,或用于MAP中键-值对之间的分隔。在create table语句中可以使用八进制编码\002表示^C用于MAC中键何值之间的分隔。在create table语句中可以使用八进制编码\003表示

对于常见的文本文件,比如.CSV和.TSV格式的文件,它们分别是以逗号(,)和制表符(\t)进行列分割的。


现在创建一张表:

hive> create table MAC1SN(ID int,MAC string,CPLSH string,SN string) row format delimited fields terminated by ',';

该表以逗号进行列分隔。

一.数据导入


    1.从文件导入

现在上传数据到MAC1SN中。数据在文件234.csv中,该文件在本地文件系统的用户主目录(~)下面。


hive> load data local inpath '234.csv' into table mac1sn;Loading data to table default.mac1snOKTime taken: 25.792 secondshive> dfs -ls -R /user/hive/warehouse;Found 1 itemsdrwxr-xr-x   - zhang supergroup          0 2017-04-20 10:23 /user/hive/warehouse/mac1sn-rwxr-xr-x   1 zhang supergroup       4295 2017-04-20 10:23 /user/hive/warehouse/mac1sn/234.csvhive> 

可以看到数据已经上传成功了。

使用load data命令时,需要注意,当使用local关键字时,是从本地加载;如果不使用local关键字,是从hdfs加载。


  2.查询导入

    先创建一张新表(mac2sn),结构和mac1sn一样。

    hive>create table mac2sn like mac1sn;

   现在将从mac1sn查询到的数据导入到mac2sn:

   hive> insert into table mac2sn select * from mac1sn where ID>100;

   hive> select * from mac2sn;
    OK
   101    00231F70CDC6    042540    I331150423S042540
   102    00231F70CD82    042541    I331150423S042541
   103    00231F70CD99    042542    I331150423S042542
   104    00231F70D8B0    042543    I331150423S042543
   Time taken: 0.752 seconds, Fetched: 4 row(s)
   hive>
   可以看到数据导入成功了。

   3.查询创建表并加载数据

    hive> create table mac3sn as select * from mac1sn where ID between 80 and 85;

    hive> select * from mac3sn;
    OK
    80    00231F70D9B6    042519    I331150423S042519
    81    00231F70D94E    042520    I331150423S042520
    82    00231F70E46A    042521    I331150423S042521
    83    00231F70DE17    042522    I331150423S042522
    84    00231F70D94A    042523    I331150423S042523
    85    00231F70D988    042524    I331150423S042524

    Time taken: 0.69 seconds, Fetched: 6 row(s)
    hive>


   4.分区表导入

     先创建一张分区表

     hive> create table macsn(ID string,MAC string,CPLSH string,SN string) partitioned by(Pro string) row format delimited fields terminated by ',';

     注意:创建分区表时,partitioned一定要写在row等关键字的最前面。

    

hive> load data local inpath '234.csv' into table macsn partition(Pro='SC');
    hive>select * from mac1sn;

    可以看到有5列数据,最后一列的值是'SC'。

二.数据导出

将查询的结果导出到目标文件中:

   方法1:

zhang@Desktop1:~$ hive -e "select * from mac1sn where ID>100";#这里演示查询

Logging initialized using configuration in jar:file:/usr/local/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: true
OK
101    00231F70CDC6    042540    I331150423S042540
102    00231F70CD82    042541    I331150423S042541
103    00231F70CD99    042542    I331150423S042542
104    00231F70D8B0    042543    I331150423S042543
Time taken: 14.932 seconds, Fetched: 4 row(s)
zhang@Desktop1:~$ hive -S -e "select * from mac1sn where ID>100" > ~/query.txt;#这里将查询到的结果导出到query.txt
zhang@Desktop1:~$ cat ~/query.txt
101    00231F70CDC6    042540    I331150423S042540
102    00231F70CD82    042541    I331150423S042541
103    00231F70CD99    042542    I331150423S042542
104    00231F70D8B0    042543    I331150423S042543
zhang@Desktop1:~$

其中的-e命令表示命令执行结束后hive CLI立即退出;-S命令可以开启静默模式,这样在输出结果中去掉“OK”,“Time taken”等行以及其他一些无关紧要的东西。


   方法2:

   hive> insert overwrite local directory 'query' select * from mac1sn where ID between 80 and 85;//将查询结果导入数据到本地的query文件夹中

   hive>!ls query;

   000000_0

   hive> !cat query/000000_0;
   8000231F70D9B6042519I331150423S042519
   8100231F70D94E042520I331150423S042520
   8200231F70E46A042521I331150423S042521
   8300231F70DE17042522I331150423S042522
   8400231F70D94A042523I331150423S042523
   8500231F70D988042524I331150423S042524
   hive>

   如果导入时不加入local关键字,则是导入到hdfs中。可以使用"dfs -cat 导入目录"查看导入结果。

0 0
原创粉丝点击