HIVE 导入导出文件

参考:

HIVE 导出文件

导入文件

本地文件系统到HIVE表

把本地文件系统中的数据导入到 HIVE 表中,我们先来看下表结构

CREATE TABLE IF NOT EXISTS stu_info
(
    stu_id      string    COMMENT '学生ID'
   ,stu_name    string    COMMENT '学生姓名'
   ,stu_age     string    COMMENT '学生年龄'
   ,stu_addr    string    COMMENT '学生地址'
)
COMMENT '学生信息表'
PARTITIONED BY (ds string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS textfile;

将本地文件加载到表中,文件的分隔符必须是 \t

-- 格式
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

-- 导入本地文件
LOAD DATA LOCAL INPATH '/opt/data/student.txt' OVERWRITE INTO TABLE stu_info PARTITION (ds = '20220401');

-- 导入本地文件夹
LOAD DATA LOCAL INPATH '/opt/stu' OVERWRITE INTO TABLE stu_info PARTITION (ds = '20220402');

在这里插入图片描述
说明:HIVE 3.0 以下的版本只有 textfile 格式的表支持导入数据,其他格式需要通过格式为 textfile 的中间表导入数据

HDFS到HIVE表

和本地文件系统到 HIVE 表的操作类似,只需要把 LOCAL去掉就可以了,我们试下

先把文件上传到 HDFS

hdfs dfs -put /opt/data/student.txt /user/hive/temp

导入HDFS的文件到 stu_info 的分区 20220402

LOAD DATA INPATH '/user/hive/temp/student.txt' OVERWRITE INTO TABLE stu_info PARTITION (ds = '20220402');

在这里插入图片描述

把其它表的查询结果插入到指定表中

这种方式在开发中最常用,示例如下:

INSERT OVERWRITE TABLE stu_info PARTITION (ds = '20220403')
SELECT   user_id
        ,user_name
        ,user_age
        ,user_addr
FROM cust_info
;

在这里插入图片描述

导出文件

表中的数据到本地文件(HIVE)

其实在实际开发场景,一些关键性的数据可能还是需要我们导出来,然后下发给业务,所以此时就需要一些导出数据的操作,需要注意以下几点:

1. 文件夹路径的文件夹应该是一个空文件夹,防止原数据被覆盖
2. 如果使用了 LOCAL 关键字,HIVE 会把数据写入到本地文件系统中
3. 数据会序列化到本地文件中,字段的分隔符默认为 ^A,行的分隔符默认为新的一行,如果字段不是基础类型,HIVE 会把这些字段使用 JSON 进行序列话

如图所示,我们需要把该表中的数据导出来

在这里插入图片描述

-- 导出数据的格式
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format]
  SELECT ... FROM ...

示例

-- 将表的数据写入到 '/opt/data/student' 文件夹 ,字段分隔符为 '\t'
INSERT OVERWRITE LOCAL DIRECTORY '/opt/data/student' 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS textfile
SELECT user_id, user_name, user_age, user_addr
FROM cust_info
;

表中的数据到本地文件(bash)

还有一种方法可以把文件直接导出到本地,并且可以文件命名,通过 HIVE 客户端命令可以实现

# 保存查询结果到 student.txt 文件中
hive -e "SELECT user_id, user_name, user_age, user_addr FROM cust_info" > /opt/data/student.txt

表中数据到 HDFS

这里的操作和 [表中数据到本地文件] 类似,只是需要把 LOCAL 去掉,即可

示例:把 cust_info 中的数据导入到 /user/hive/temp/student

INSERT OVERWRITE DIRECTORY '/user/hive/temp/student' 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS textfile
SELECT user_id, user_name, user_age, user_addr
FROM cust_info
;

在这里插入图片描述
查看 HDFS 文件目录中的文件

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值