beeline 将查询的数据导出来_几种保存Hive查询结果的方法

本文介绍了使用beeline将Hive查询结果导出到本地文件系统、HDFS以及Hive另一个表中的方法,包括INSERT OVERWRITE LOCAL DIRECTORY、INSERT OVERWRITE DIRECTORY以及CREATE TABLE AS SELECT等命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以根据导出的地方不一样,将这些方式分为三种:

1.导出到本地文件系统;

2.导出到HDFS中;

3.导出到Hive的另一个表中

一、保存结果到本地

方法1:调用hive标准输出,将查询结果写到指定的文件中

这个方法最为常见,sql的查询结果将直接保存到/tmp/out.txt中

$ hive -e "select user, login_timestamp from user_login" > /tmp/out.txt

当sql脚本过多时,也可以使用 -f sql文件名 ,按下面的方式执行查询,并保存结果

$ hive -f file.sql > /tmp/out.txt

下面是file.sql的内容:

$ cat file.sql

select user, login_timestamp from user_login

方法2:使用INSERT OVERWRITE LOCAL DIRECTORY结果到本地

hive> insert overwrite local directory "/tmp/out/"

> select user, login_time from user_login;

这条HQL的执行需要启用Mapreduce完成,运行完这条语句之后,将会在本地文件系统的/tmp/out/目录下生成文件,这个文件是Reduce产生的结果(这里生成的文件名是000000_0)

我们也可以在导出时指定字段分割符:

hive> insert overwrite local directory "/tmp/out/"

> row format delimited fields terminated by "\t"

> select user, login_time from user_login;

注意:和导入数据到Hive不一样,不能用insert into来将数据导出。

二、保存结果到hdfs

保存查询结果到hdfs很简单,使用INSERT OVERWRITE DIRECTORY就可以完成操作

hive> insert overwrite directory "/tmp/out/"

> row format delimited fields terminated by "\t"

> select user, login_time from user_login;

需要注意的是,跟保存到本地文件系统的差别是,保存到hdfs时命令不需要指定LOCAL项

三、保存结果到HIVE表

方法1、已经建好结果表,使用INSERT OVERWRITE TABLE以覆盖方式写入结果表,要确保表字段一致

hive> insert overwrite table query_result

> select user, login_time from user_login

HIVE也提供了追加方式INSERT TABLE,可以在原有数据后面加上新的查询结果。

hive> insert into table query_result

> select * from query_result;

方法2、如果需要新建一个表,用于存放查询结果,可以使用CREATE TABLE AS SELECT语法

hive> create table query_result

> as

> select user, login_time from user_login;

四、使用hdfs命令导出文件

Hive是构建在hdfs上的,因此,我们可以使用hdfs的命令hadoop dfs -get直接导出表。

首先、我们先找到要导出的表存放到哪个目录下:

hive> show create table t_tag_dm_rk;

OK

CREATE TABLE `t_tag_dm_rk`(

`id` string COMMENT ';.',

`uuid` string COMMENT '�X�',

`tag_value` string COMMENT '~

`tag_value_type` string COMMENT '~

PARTITIONED BY (

`fq_day` string COMMENT ':��',

`tag_code` string COMMENT '~�')

ROW FORMAT SERDE

'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'

WITH SERDEPROPERTIES (

'field.delim'=',',

'serialization.format'=',')

STORED AS INPUTFORMAT

'org.apache.hadoop.mapred.TextInputFormat'

OUTPUTFORMAT

'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

LOCATION

'hdfs://chinaol/apps/hive/warehouse/chinaoly_prod.db/t_tag_dm_rk'

TBLPROPERTIES (

'transient_lastDdlTime'='1557742726')

Time taken: 0.377 seconds, Fetched: 21 row(s)

可以看到,表存放到在hdfs://chinaol/apps/hive/warehouse/chinaoly_prod.db/t_tag_dm_rk。

接下来,直接利用hadoop dfs -get导出到本地:

hdfs dfs -get hdfs://chinaoly/apps/hive/warehouse/chinaoly_prod.db/t_tag_dm_rk /home/dev/wangx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值