一起学Hive——总结复制Hive表结构和数据的方法
在使用Hive的过程中,复制表结构和数据是很常用的操作,本文介绍两种复制表结构和数据的方法。
1、复制非分区表表结构和数据
Hive集群中原本有一张bigdata17_old表,通过下面的SQL语句可以将bigdata17_old的表结构和数据复制到bigdata17_new表:
CREATE TABLE bigdata17_new AS SELECT * FROM bigdata17_old;
如果是分区表,则必须使用like关键字复制表结构,包括分区,然后用insert语句将老表的数据插入新表中。
2、复制分区表表结构和数据
复制表SQL:
CREATE TABLE bigdata17_new like bigdata17_old;
复制数据sql:
insert overwrite table bigdata17_new partition(dt) select * from bigdata17_old;
如果遇到bigdata17_old表数据量巨大,有T以上的级别时,上述方法的效率则比较低。下面介绍一种快速复制表结构和表数据的方法。
从旧表中复制表结构,这个和上面介绍方法是一样的:
CREATE TABLE bigdata17_new like bigdata17_old;
然后使用hadoop fs - cp命令将bigdata17_old旧表的数据拷贝到bigdata17_new新表:
hadoop fs -cp /user/warehouse/bigdata17.db/bigdata17_old/* /user/warehouse/bigdata17.db/bigdata17_new/
然后执行 MSCK REPAIR TABLE new_table;命令让两张表的分区元数据保持一致。
详细使用过程如下:
bigdata17_old表有两个字段,id和dt,其中dt是分区字段,一共有4条记录,两个分区:
hive> desc bigdata17_old;
OK
id int
dt string
# Partition Information
# col_name data_type comment
dt string
Time taken: 0.147 seconds, Fetched: 7 row(s)
hive> select * from bigdata17_old;
OK
15 2018-10-13
18 2018-10-13
12 2018-10-14
13 2018-10-14
Time taken: 0.118 seconds, Fetched: 4 row(s)
hive> show partitions bigdata17_old;
OK
dt=2018-10-13
dt=2018-10-14
Time taken: 0.113 seconds, Fetched: 2 row(s)
创建表结构和bigdata17_old表一模一样的表bigdata17_new:
create table bigdata17_new like bigdata17_old;
查看表bigdata17_new的表结构:
hive> show partitions bigdata17_new;
OK
Time taken: 0.153 seconds
hive> desc bigdata17_new;
OK
id int
dt string
# Partition Information
# col_name data_type comment
dt string
Time taken: 0.151 seconds, Fetched: 7 row(s)
由于表bigdata17_new还没有数据,因此该表中没有分区信息。
将bigdata17_old目录下的数据文件拷贝到bigata17_new目录下:
[root@hadoop-master hive_test]# hadoop fs -cp /user/hive/warehouse/bigdata17.db/bigdata17_old/* /user/hive/warehouse/bigdata17.db/bigdata17_new/;
18/10/13 19:02:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[root@hadoop-master hive_test]# hadoop fs -ls /user/hive/warehouse/bigdata17.db/bigdata17_new/
18/10/13 19:03:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
drwxr-xr-x - root supergroup 0 2018-10-13 19:02 /user/hive/warehouse/bigdata17.db/bigdata17_new/dt=2018-10-13
drwxr-xr-x - root supergroup 0 2018-10-13 19:02 /user/hive/warehouse/bigdata17.db/bigdata17_new/dt=2018-10-14
查看表bigdata17_new的分区信息:
hive> show partitions bigdata17_new;
OK
Time taken: 0.125 seconds
虽然数据拷贝过来了,但是表bigdata17_new的分区信息还没更新到metastore中,因此需要使用MSCK命令修复bigdata17_new的分区信息,执行该命令后就会把bigdata17_new的分区信息更新到hive metastore中:
hive> MSCK REPAIR TABLE bigdata17_new;
OK
Partitions not in metastore: bigdata17_new:dt=2018-10-13 bigdata17_new:dt=2018-10-14
Repair: Added partition to metastore bigdata17_new:dt=2018-10-13
Repair: Added partition to metastore bigdata17_new:dt=2018-10-14
Time taken: 0.21 seconds, Fetched: 3 row(s)
查看表bigdata17_new的表结构和查询表数据:
hive> show partitions bigdata17_new;
OK
dt=2018-10-13
dt=2018-10-14
Time taken: 0.137 seconds, Fetched: 2 row(s)
hive> select * from bigdata17_new;
OK
15 2018-10-13
18 2018-10-13
12 2018-10-14
13 2018-10-14
Time taken: 0.099 seconds, Fetched: 4 row(s)
表bigdata17_new已经创建完毕,它的表结构、分区信息和表bigdata17_old一样,数据也一模一样。
如果是跨Hive集群复制表和数据,又要怎么做呢?
其实和上述步骤差不多,只是因为跨Hive集群,新表和旧表之间不能使用hadoop cp命令拷贝数据。假设有两个集群,分区为Hive1和Hive2,两个Hive集群都有表bigdata17_order,表结构完全一样。怎么将集群Hive1中的bigdata17_order表的数据拷贝到集群Hive2中的bigdata17_order表中呢?下面介绍实现步骤:
1、将表Hive1集群bigdata17_order目录下的数据下载到本地:
hadoop fs -get /user/warehouse/bigdata17.db/bigdata17_order/* /home/hadoop/hivetest/bigdata17_order/
2、通过hadoop fs -put命令将本地数据上传到集群Hive2中的bigdata17_order目录中:
hadoop fs -put /home/hadoop/hivetest/bigdata17_order/* /user/warehouse/bigdata17.db/bigdata17_order/
3、在集群Hive2中执行MSCK命令修复表bigdata17_order的分区信息:
MSCK REPAIR TABLE bigdata17_order;
Hive MSCK命令的用法请参考:一起学Hive——使用MSCK命令修复Hive分区
总结
1、介绍复制Hive非分区表和数据的方法
2、介绍复制Hive分区表和数据的两种方法
3、介绍跨Hive集群拷贝分区表数据的方法。
一起学Hive——总结复制Hive表结构和数据的方法的更多相关文章
- MySQL 复制表(表结构、表结构和数据)
MySQL 中使用 命令行 复制表结构及数据的方法主要有以下几种: 1.只复制表结构 CREATE TABLE new_table SELECT * FROM old_table WHERE 1=2: ...
- 复制表结构和数据SQL语句
select * into 目标表名 from 源表名 insert into 目标表名(fld1, fld2) select fld1, 5 from 源表名 以上两句都是将 源表 的数据插入到 目 ...
- SQL复制表结构和数据
1.复制表结构和数据 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from inf ...
- SQL——表结构或数据的复制
一.复制表结构及数据到新表 create table new_tb select * from old_tb 二.只复制表结构到新表 create table new_tb select * from ...
- orcale复制表结构及其数据
http://hi.baidu.com/tag/Oracle/feeds http://hi.baidu.com/gqftuisidibabiq/item/14d306cc87cbdf45bcef69 ...
- Oracle复制表结构及数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: ; 或者: create ...
- 【Oracle】【2】复制表结构及其数据
--复制表结构及其数据 create table table_name_new as select * from table_name_old; --只复制表结构 ; --create table t ...
- Sqlite 复制表结构和数据
复制表结构 ; 复制表结构和数据 create table newTb as select * from oldTb:
- mysql复制表结构和数据
1.复制表结构: create table newName like oldName;//可以复制所有结构. 或者: create table newName select * from oldNam ...
随机推荐
- 阿里云服务器上通过Docker部署redmine
背景:在日常工作的过程中会遇到各种各样的问题,每个问题来了之后需要花时间解决.这里就面临两个问题. 1:问题责任不明确,有时候会遇到数据库或者物理服务器的问题,这时候就需要把相应问题指派给相应的人,传 ...
- $Django Rest Framework-频率组件,解析器
1 频率组件 #自定义组件写频率认证(重点继承BaseThrottle) from rest_framework.throttling import BaseThrottle import time ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- 利用表格分页显示数据的js组件datatable的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用js下载文件
使用Echarts地图时,需要一些地图数据,到Echarts下载地图数据文件时,发现其下载是直接通过js下载,从其网站上扒下来的记录于此 FileSave.min.js网络地址:http://ecom ...
- MYSQL 查看最大连接数和修改最大连接数
MySQL查看最大连接数和修改最大连接数 1.查看最大连接数show variables like '%max_connections%';2.修改最大连接数set GLOBAL max_connec ...
- 用C#开发基于自动化接口的OPC客户端
OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁.OPC作为一 ...
- jdbctemplate 调用oracle 有返回(会话型临时表数据的)结果的存储过程
注:本文为博主 原创. jdbctemplate 调用oracle存储过程 事务 临时表 有返回结果 1:java 代码 本逻辑代码本是想把 java 代码里的list<Strign>类 ...
- Confluence 6 基本性能问题诊断步骤
基本性能问题诊断步骤 开始下面的程序: 进入 Troubleshooting Confluence hanging or crashing页面找到已知的主要性能问题. 进行页面 Performance ...
- Confluence 6 通过 SSL 或 HTTPS 运行 - 创建或请求一个 SSL 证书
在启用 HTTPS 之前,你需要一个有效的证书,如果你已经有了一个有效的证书,你可以直接跳过这个步骤,进入 step 2. 你可以创建一个自签名的证书,或者从信任的 Certificate Autho ...