在hive和presto中将外部表架构和元数据从一个db复制到另一个db

vh0rcniy  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(335)

我想在hive和presto(aws athena)中将一个外部表的模式及其所有分区信息从一个数据库复制到另一个数据库。要清楚的是,我不想复制任何底层数据-只是元数据。
最好的方法是什么?

3j86kqsm

3j86kqsm1#

在prestosql中,您可以使用 CREATE TABLE ... LIKE 语法。看到了吗https://prestosql.io/docs/current/sql/create-table.html.

CREATE TABLE bigger_orders (
   LIKE orders INCLUDING PROPERTIES
)
oug3syen

oug3syen2#

在雅典娜你云生成ddl与 SHOW CREATE TABLE database1.tablename 然后执行这个语句 database1database2 . 它将复制模式,但不复制数据和分区。要填充分区,您应该在上执行msck repair table database2.tablename . 普雷斯托也是这样。
如果无法使用 MSCK REPAIR TABLE 您可以使用glue api复制它:

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)

相关问题