我想在hive和presto(aws athena)中将一个外部表的模式及其所有分区信息从一个数据库复制到另一个数据库。要清楚的是,我不想复制任何底层数据-只是元数据。最好的方法是什么?
3j86kqsm1#
在prestosql中,您可以使用 CREATE TABLE ... LIKE 语法。看到了吗https://prestosql.io/docs/current/sql/create-table.html.
CREATE TABLE ... LIKE
CREATE TABLE bigger_orders ( LIKE orders INCLUDING PROPERTIES )
oug3syen2#
在雅典娜你云生成ddl与 SHOW CREATE TABLE database1.tablename 然后执行这个语句 database1 至 database2 . 它将复制模式,但不复制数据和分区。要填充分区,您应该在上执行msck repair table database2.tablename . 普雷斯托也是这样。如果无法使用 MSCK REPAIR TABLE 您可以使用glue api复制它:
SHOW CREATE TABLE database1.tablename
database1
database2
database2.tablename
MSCK REPAIR TABLE
import boto3 glue = boto3.client('glue') paginator = glue.get_paginator('get_partitions') DB_NAME_SRC = 'src' DB_NAME_DST = 'dst' TABLE = 'tablename' partitions = [] for page in paginator.paginate(DatabaseName=DB_NAME, TableName=TABLE): for partition in page['Partitions']: del partition['DatabaseName'] del partition['TableName'] del partition['CreationTime'] partitions.append(partition) print("Got %d partitions" % len(partitions)) glue.batch_create_partition(DatabaseName=DB_NAME_DST, TableName=TABLE, PartitionInputList=partitions)
2条答案
按热度按时间3j86kqsm1#
在prestosql中,您可以使用
CREATE TABLE ... LIKE
语法。看到了吗https://prestosql.io/docs/current/sql/create-table.html.oug3syen2#
在雅典娜你云生成ddl与
SHOW CREATE TABLE database1.tablename
然后执行这个语句database1
至database2
. 它将复制模式,但不复制数据和分区。要填充分区,您应该在上执行msck repair tabledatabase2.tablename
. 普雷斯托也是这样。如果无法使用
MSCK REPAIR TABLE
您可以使用glue api复制它: