- 学习:知识的初次邂逅
- 复习:知识的温故知新
目录
一,导出数据的需求
-
数据备份:导出数据到外部系统或存储介质,以确保数据的可靠性和安全性。在数据丢失或损坏的情况下,可以从备份中恢复数据。
-
数据迁移:当需要将数据从一个Hive集群迁移到另一个Hive集群,或者迁移到其他类型的数据存储系统(如关系数据库、NoSQL数据库等)时,需要导出数据。
-
数据分析与报告:有时候,分析师或报告工具需要直接从Hive表中提取数据,以便进行进一步的分析或生成报告。虽然Hive支持复杂的查询,但某些工具可能更适合处理本地或特定格式的数据文件。
-
数据共享:在多个团队或组织之间共享数据时,需要将数据导出为易于传输和访问的格式。
-
性能优化:在某些情况下,将Hive中的数据导出到更高效的存储格式或系统中,可以提高查询性能。例如,将Hive表中的数据导出到Parquet或ORC格式的文件中,然后在需要时将这些文件重新加载到Hive中,以利用这些格式的优化查询能力。
二,导出数据的详细步骤和代码
一,准备工作
创建普通表
-- 创建分区表
create table if not exists tb_orders_part(
order_id INT COMMENT '订单ID',
customer_id INT COMMENT '客户ID',
product STRING COMMENT '产品名称',
quantity INT COMMENT '数量',
price DECIMAL(10,2) COMMENT '单价'
)
partitioned by (dt string) --指定分区 以这个列分组 列的类型是字符串
row format delimited fields terminated by ',' --指定以逗号 分割文本
stored as textfile ; --指定以目录存储
创建分区表
-- 第二种方式 动态加载
create table tb_orders_part_2(
order_id INT COMMENT '订单ID',
customer_id INT COMMENT '客户ID',
product STRING COMMENT '产品名称',
quantity INT COMMENT '数量',
price DECIMAL(10,2) COMMENT '单价'
)
partitioned by (dt string) --指定分区的字段
row format delimited fields terminated by ',' -- 指定分隔符
stored as textfile ; --指定以目录存储
-- 动态数据之前 需要关闭严格模式
set hive.exec.dynamic.partition.mode=nonstrict;
-- 动态插入数据
insert into tb_orders_part_2 partition(dt)
select
order_id, customer_id, product, quantity, price,
dt
from tb_orders;
二,逐个导出
1,把分区表的数据导出到linux里面
-- 导出数据到Linux里面
insert overwrite local directory '/root/data/'
select * from tb_insert_into_par2;
2,导出到hdfs里面
-- 导出数据到HDFS里面
-- 假设我们导出的是 tb_insert_into_par
insert overwrite directory '/data/'
select * from tb_insert_into_par
where dt='2024-07-01';
三,多重导出
前提是多个文件的表来自同一个目录 我们准备的数据就是一个分区表
--把数据导出到linux中 多重导出
from tb_insert_into_par2
insert overwrite local directory '/root/data/dt20240701'
select * where dt='2024-07-01'
insert overwrite local directory '/root/data/dt20240702'
select * where dt='2024-07-02'
insert overwrite local directory '/root/data/dt20240703'
select * where dt='2024-07-03'
三,思维导图
- 学习:知识的初次邂逅
- 复习:知识的温故知新