Hive 表的复制

简介

本文介绍hive中表的复制

非分区表的复制

如果我们想要复制一张非分区表,可以使用create tale as去解决;

实例

假如我们有一张t_temp的表,为普通的内部表.复制可以采用如下的语句:

create table t_copy as select * from t_temp;

这样就复制出一张和t_temp结构一致的表

分区表的复制

分区表如果采用这种create…as…的方法去复制,数据是可以查询的,但是表的结构是错误的,他已经变成了一个非分区表.想要去实现分区表的复制,有下面2种方法

动态分区

我们可以建一张和t_temp一样的表结构的表,然后使用动态分区的方法把数据导入

create table t_copy like t_part;
insert overwrite  table  t_copy partition(year,month)
select id,name,orderdate,substring(orderdate,1,4),substring(orderdate,6,2) from t_part;

执行后可以得到和之前一样的分区表,但是这种方法并不是最快的方法
- 注意当使用了overwrite时,不再使用into.

msck修复分区

我们可以先复制出一张表结构和t_part一样的表,然后将t_part表目录下的数据copy到t_copy,然后使用分区表的msck指令去重新生成分区.

create table t_copy like t_part;
dfs -cp /user/hive/warehouse/test_neil.db/t_part/* /user/hive/warehouse/test_neil.db/t_copy/;
msck repair table t_copy;

使用这样的方法同样可以去快速copy分区表,而且这样操作的速度比使用动态分区要快,因为我们移动数据是使用hdfs的文件复制,而不是启动mapreduce作业.

HiveSQL 中,复制结构和数据是常见的操作,通常用于数据迁移、备份或创建测试环境等场景。以下是具体的操作方法。 ### 复制结构 要复制一张的结构而不复制数据,可以使用 `CREATE TABLE ... LIKE` 语句。该语句会创建一个与原结构相同的新,但不包含任何数据。 ```sql CREATE TABLE new_table_name LIKE existing_table_name; ``` 此操作会复制的所有列定义、分区信息以及存储格式,但不会复制中的实际数据[^1]。 ### 复制结构和数据 如果需要同时复制结构和数据,可以使用 `CREATE TABLE ... AS SELECT`(简称 CTAS)语句。该语句会创建一个新,并将查询结果插入到新中。 ```sql CREATE TABLE new_table_name AS SELECT * FROM existing_table_name; ``` 此语句会根据 `SELECT` 查询的结果自动创建新的结构,并将数据插入到新中。需要注意的是,`CTAS` 语句会根据查询结果推断列的数据类型,因此在某些情况下可能需要显式指定列的数据类型以确保一致性[^1]。 ### 复制并保留原的属性 如果希望复制结构和数据,并且保留原的某些属性(如分区、桶设置等),可以先使用 `CREATE TABLE ... LIKE` 创建结构相同的,然后使用 `INSERT OVERWRITE` 或 `INSERT INTO` 将数据插入到新中。 ```sql -- 创建结构相同的 CREATE TABLE new_table_name LIKE existing_table_name; -- 将数据插入到新中 INSERT OVERWRITE TABLE new_table_name SELECT * FROM existing_table_name; ``` 这种方式可以确保新与原在结构、分区、存储格式等方面保持一致,并且可以选择性地覆盖或追加数据[^1]。 ### 示例 假设有一个 `employees`,其结构如下: ```sql CREATE TABLE employees ( id INT, name STRING, salary FLOAT ) PARTITIONED BY (country STRING); ``` 如果要复制的结构和数据到一个新 `employees_backup` 中,可以使用以下语句: ```sql CREATE TABLE employees_backup AS SELECT * FROM employees; ``` 如果希望保留分区信息,可以使用: ```sql CREATE TABLE employees_backup LIKE employees; INSERT OVERWRITE TABLE employees_backup SELECT * FROM employees; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值