hive的数据导入导出,备份恢复

本文详细介绍了如何使用Hive进行数据的导入导出操作,包括从HDFS和本地文件系统加载数据到Hive表,以及将Hive表数据导出到本地路径的方法。此外,还讲解了Hive的Export和Import命令,用于完整备份和恢复包括表结构和数据在内的整个Hive表。

加载HDFS文件数据到表:

LOAD DATA INPATH "hdfs_source_path" OVERWRITE INTO TABLE tbl_nm;

加载本地文件数据到表:

LOAD DATA LOACL INPATH "loacl_source_path" OVERWRITE INTO TABLE tbl_nm;

将数据导出至本地路径下:

insert overwrite local directory '/localpath/to/stoage/' select * from tbl_nm;

将数据导出至本地路径下,可以指定存储格式与分隔符等:

insert overwrite local directory '/localpath/to/stoage/' row format delimited fields terminated by ','  select * from tbl_nm;

Export和Import:

hive自带了数据的备份和恢复命令,不止数据,包括表结构也可以一同导出:

 

这里的path是HDFS的路径,我这里将表导出然后删除之后再恢复:

Export:

export table tab_nm to '/hdfs_path/to/storage';

再看一下这个目录下是什么样子的:

可以看到导出后的目录下,有一个_metadata元数据文件存储hive表的元数据以及一个data目录存储hive表数据。

执行export命令就是将表结构存储在_metadata文件,并且直接将hive数据文件复制到备份目录。

Import:

执行import命令,选择刚才导出的hdfs目录即可,注意这里的新表原来是不存在的,在import的时候会根据_metadata文件里的信息自动建表,方便做hive表的备份恢复或者迁移操作。

import table tab_nm from '/hdfs_path/to/storage';

Hive 中,`INSERT` 导出导入和 `EXPORT`/`IMPORT` 导出导入有以下区别: ### 数据处理方式 - **INSERT**:`INSERT` 主要用于将查询结果插入到目标表中。它是基于 SQL 语句的操作,本质上是将源表中的数据经过查询筛选后,直接插入到目标表。例如: ```sql INSERT OVERWRITE TABLE target_table SELECT * FROM source_table WHERE some_condition; ``` 这种方式是在 Hive 内部进行数据的逻辑转移,不涉及数据的物理移动和序列化,只是将数据从一个表的存储位置转移到另一个表的存储位置 [^1]。 - **EXPORT/IMPORT**:`EXPORT` 会将 Hive 表的数据和元数据导出HDFS 上的一个指定目录,数据会被序列化为一种特定的格式存储。`IMPORT` 则是将之前导出数据和元数据重新导入到 Hive 中,创建一个新的表。例如: ```sql EXPORT TABLE source_table TO '/path/to/export'; IMPORT TABLE target_table FROM '/path/to/export'; ``` 这种方式是将数据Hive 表物理地导出HDFS,再从 HDFS 物理地导入到新的 Hive 表,涉及数据的序列化和反序列化过程 [^1]。 ### 元数据处理 - **INSERT**:`INSERT` 操作只处理数据,不会对表的元数据进行转移或复制。目标表需要提前创建好,并且其表结构必须与插入的数据结构相匹配。如果目标表结构与源表结构不一致,可能会导致数据插入失败或数据丢失 [^1]。 - **EXPORT/IMPORT**:`EXPORT` 操作会同时导出表的数据和元数据,包括表的结构、分区信息、存储格式等。`IMPORT` 操作会根据导出的元数据创建新的表,因此不需要提前创建目标表,并且可以保证源表和目标表的元数据完全一致 [^1]。 ### 数据完整性和一致性 - **INSERT**:由于 `INSERT` 是基于查询的操作,如果在插入过程中出现异常(如系统故障、数据冲突等),可能会导致部分数据插入成功,部分数据插入失败,从而影响数据的完整性和一致性。而且,`INSERT` 操作不会对源表的数据进行备份,一旦出现问题,很难恢复到操作前的状态 [^1]。 - **EXPORT/IMPORT**:`EXPORT` 操作会将数据完整地导出HDFS 上,即使在导入过程中出现问题,也可以重新进行导入操作,保证数据的完整性。同时,由于导出数据是一个独立的副本,不会影响源表的数据,因此可以提供更好的数据一致性 [^1]。 ### 性能和适用场景 - **INSERT**:`INSERT` 操作通常比较快,因为它只是在 Hive 内部进行数据的逻辑转移,不涉及数据的物理移动和序列化。适用于在同一个 Hive 集群中进行数据的增量更新、数据筛选和转移等操作 [^1]。 - **EXPORT/IMPORT**:`EXPORT` 和 `IMPORT` 操作涉及数据的物理移动和序列化,因此性能相对较低。但是,它适用于将数据从一个 Hive 集群迁移到另一个 Hive 集群,或者进行数据备份恢复等操作 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值