保存Hive的查询结果

请参考 保存Hive的查询结果(视频教程)

如何存储查询分析的结果?可以通过创建新的Hive表来保存Hive查询的输出数据,还可以将一个Hive查询的结果数据插入到另一个已经存在的表。

根据导出的地方不一样,有三种不同的数据导出方式:

  • 1) 导出到本地文件系统;
  • 2) 导出到HDFS中;
  • 3) 导出到Hive的另一个表中。

下面我们继续在上一节内容的基础上执行操作。

一、导出到本地文件系统:insert overwrite local directory ... select ...

首先,我们尝试将在物价检测表上查询的结果保存到本地/home/hduser/price_output1目录下, 表中的每一条记录对应导出文件中的一行,字段之间指定用制表位作为分隔符:

insert overwrite local directory '/home/hduser/price_output1'
row format delimited
fields terminated by '\t'
select jcmc,jclb,bqjg from pricewatch;

二、导出到HDFS中:insert overwrite directory ... select ...

首先,我们尝试将在物价检测表上查询的结果保存到HDFS的/hive_data/price_output3目录下, 表中的每一条记录对应导出文件中的一行,字段之间指定用制表位作为分隔符:

insert overwrite directory '/hive_data/price_output3'
row format delimited
fields terminated by '\t'
select jcmc,jclb,bqjg from pricewatch;

三、将查询结果保存到另一张hive表中

1) 使用CTAS方式:导出的同时创建一张新表。

-- CTAS
create table tmp_price 
as 
select jcmc,jclb,bqjg 
from pricewatch 
where jcmc is not null;

-- 查看结果
select * from tmp_price limit 10;

注:在CTAS命令中,Hive对于目标表的格式有一些限制: 新的目标表不可以是外部表、分区表或桶表。

2) 将查询结果插入到一个已经存在的表中

insert into table tmp_price
select jcmc,jclb,bqjg from pricewatch where jcmc is not null;

-- 查看结果
select * from tmp_price2 limit 10;    

《Spark原理深入与编程实战》