您的位置:首页 > 其它

hive导入导出数据案例

2015-08-16 22:38 459 查看
查询数据:

use ods;set /user.password=ODS-SH;select * from base_cdma_all limit 10;

use tag_bonc;select * from dpi_http_userapp_statistics limit 100000; 

#设置显示当前使用的数据库

set hive.cli.print.current.db=true;

#设置不优先使用MapReduce

set hive.exec.mode.local.auto=true;

======================导出数据=============================

#导出hive数据到本地(事先要建好目录)

use myexec;

insert overwrite local directory '/home/hadoop/res'

row format delimited

fields terminated by '\t'

select column1,column2 from table1;

#不显式指定分隔符将会以默认的分隔符来分割列

use myexec;

insert overwrite local directory '/home/hadoop/res'

select * from table1;

#导出hive数据到HDFS(不要事先建好目录)

use myexec;

insert overwrite directory '/hive_data_to_hdfs'

select * from table1;

#导出到Hive的另一个表中

use myexec;

insert into table2

row format delimited

fields terminated by '\t'

select * from table1;

#用hive的-e和-f参数来导出数据。其中-e 表示后面直接接带双引号的sql语句;而-f是接一个文件(文件的内容为一个sql语句)

hive -e "use myexec;select * from table1" >> /home/hadoop/res/data1.txt

#这种方式不会启用MapReduce

hive -f mytest.hql >> /home/hadoop/res.txt

其中mytest.hql内容为:

use myexec;

select * from table1;

=====================导入数据==========================

外部表、内部表都可以分别加载本地和HDFS上的数据,创建表时最好指定列分隔符

内部表如果使用load data命令,都是把hdfs上的数据(如果是本地数据则先上传到HDFS)移动(剪切)到数据仓库所在目录

外部表如果在创建时指定了存放数据的路径,则在load data时数据是被移动到创建表时指定的目录,否则同上

两者的主要区别是:

外部表建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表(只是保持映射关系),此时数据没有被移动(数据仓库里没有显式存放该数据)

删除内部表会把数据一起删除,而删除外部表则只是使得在hive下查询不到此表(元数据被删了),数据本身没有被删除,依然存在相应的数据仓库目录下

#修改存储路径

alter table table1

set location 'hdfs://172.16.122.200:8020/data/datatest.txt';

#创建外部表时指定位置(在数据拷贝到指定hdfs路径的同时,数据插入该external表)

#这种方式常常用于当hdfs上有一些历史数据,而我们需要在这些数据上做一些hive的操作时使用,这种方式避免了数据拷贝开销

CREATE EXTERNAL TABLE MYTEST(num INT, name STRING)

COMMENT 'this is a test'

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE

LOCATION '/data/test';

#创建一个测试用表(内部表)

CREATE TABLE MYTEST2(num INT, name STRING)

COMMENT 'this is a test2'                          

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'     

STORED AS TEXTFILE;

1)数据不在hdfs上,直接从本地(local)导入hive表

这种方式导入的本地数据可以是一个文件,一个文件夹或者通配符,需要注意的是,如果是文件夹,文件夹内不能包含子目录,同样,通配符只能通配文件

LOAD DATA LOCAL INPATH '/home/work/test.txt' [OVERWRITE] INTO TABLE MYTEST2;

2)从hdfs导入数据

LOAD DATA INPATH '/data/test/test.txt' [OVERWRITE] INTO TABLE MYTEST2 [PARTITION (ds='2008-08-15')];

3)从其它表导入数据

FROM MYTEST3 test3

INSERT OVERWRITE TABLE MYTEST2

select test3.num where name='world';

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

create table test4

as
select id, name, tel

from wyp;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive