将 HIVE 中的表从一个数据库复制到另一个数据库
Posted
技术标签:
【中文标题】将 HIVE 中的表从一个数据库复制到另一个数据库【英文标题】:Copy tables in HIVE, from one database to another database 【发布时间】:2015-05-04 18:31:14 【问题描述】:在一个数据库中,我有 50 多个表,我想知道有没有办法一次性将这些表复制到第二个数据库中?
我用过这个,但是运行这个 50 多次效率不高。
create table database2.table1 as select * from database1.table1;
谢谢!
【问题讨论】:
【参考方案1】:将数据从一个数据库表复制到 Hive 中的另一个数据库表就像将数据文件从 HDFS 中的现有位置复制到 HDFS 中的新位置。
将数据从一个数据库表复制到另一个数据库表的最佳方法是在新数据库中创建外部 Hive 表并放置位置值,例如LOCATION '/user/hive/external/ 并使用 distcp 将旧表数据的文件从旧 HDFS 位置复制到新位置。
示例:旧数据库中的现有表: CREATE TABLE 站(编号 STRING、纬度 INT、经度 INT、海拔 INT、名称 STRING)行格式分隔字段以 ',' 存储为文本文件; 加载数据本地输入路径“/home/cloudera/Desktop/Stations.csv”
现在您在新数据库中创建外部表: CREATE EXTERNAL TABLE external_stations(number STRING, 纬度 INT, 经度 INT, 海拔 INT, 名称 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/external/';
现在您只需使用 将数据文件从 /user/hive/warehouse/training.db/stations/ 复制到 /user/hive/external/ distcp 命令。这两条路径特定于我的蜂巢位置。你可以有类似的。
这样可以复制任意数量的表数据。
【讨论】:
【参考方案2】:一种方法是在新数据库中创建表结构并使用 distcp 将数据从旧 HDFS 位置复制到新位置。
【讨论】:
以上是关于将 HIVE 中的表从一个数据库复制到另一个数据库的主要内容,如果未能解决你的问题,请参考以下文章