如何将所有配置单元表从一个数据库复制到另一个数据库

k2arahey  于 2021-06-26  发布在  Impala
关注(0)|答案(4)|浏览(430)

我在包含80个表的配置单元表中有默认的db。
我又创建了一个数据库,我想将所有表从默认数据库复制到新数据库。
有没有什么方法可以从一个数据库复制到另一个数据库,而不创建单独的表。
如果有什么解决办法,请告诉我。。提前谢谢

ecr0jaav

ecr0jaav1#

我可以想出几个选择。
使用CTA。

CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1;
CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2;
...

使用配置单元的导入功能https://cwiki.apache.org/confluence/display/hive/languagemanual+importexport
希望这有帮助。

syqv5f0l

syqv5f0l2#

您可以接近以下选项之一:
语法如下:export table\u或\u partition to hdfs\u path;从hdfs_路径[location[table_location]]导入[[external]table table_or_partition];
一些示例语句如下所示:将表导出到“location in hdfs”;
使用测试单元db;从“hdfs中的位置”导入;
导出导入也可以在分区的基础上应用:将表分区(loc=“usa”)导出到“location in hdfs”;
下面的import命令从'location in hdfs'location'/location/of/external/table'导入到外部表,而不是从托管表导入外部表;

k7fdbhmy

k7fdbhmy3#

创建外部表new \u db.table,就像old \u db.table location'(hdfs文件中的文件路径)';
如果表中有分区,则必须在新的\u db.table中添加分区。

c9x0cxw0

c9x0cxw04#

这可能是将表从一个db复制/移动到另一个db的最快、最简单的方法。
移动表源
从0.14开始,您可以使用以下语句将表从一个数据库移动到同一元存储中的另一个数据库:

alter table old_database.table_a rename to new_database.table_a;

上述语句还将移动hdfs上的表数据,如果 table_a 是一个托管表。
复制表的步骤
你可以随时使用 CREATE TABLE <new_db>.<new_table> AS SELECT * FROM <old_db>.<old_table>; 声明。但我相信这种复制数据库的替代方法 hdfs dfs -cp 然后用 LIKE 如果您的table很大,速度会快一点:

hdfs dfs -cp /user/hive/warehouse/<old_database>.db /user/hive/warehouse/<new_database>.db

然后在 hive 里:

CREATE DATABASE <new_database>;
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>;

相关问题