保存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;