如何在 Athena 中重命名表?

问题描述 投票:0回答:3

可能是一个非常微不足道的问题,但我对此不确定,也不想失去桌子。如何在 Athena 中重命名表?

Database name - friends
table name - centralPark
desired table name -centralPerk
sql amazon-athena
3个回答
10
投票

你不能!

请参阅 Athena 中的不支持的 DDL 列表。

你可以做的是创建一个新表使用 select:

CREATE TABLE centralPark
AS SELECT * FROM centralPerk
WITH DATA

并删除旧表:

DROP TABLE IF EXISTS centralPerk

0
投票

使用 CTAS 查询很有效,但我发现它相当慢。它需要复制所有文件。

但是不需要复制文件。您可以直接在 Glue 目录中创建一个新表并将其指向现有文件。这可以在几秒钟或更短的时间内完成。

如果您使用 Python,我强烈推荐使用 awswrangler 库来完成此类工作。

import awswrangler as wr

def wrangler_copy(db, old_name, new_name):
    wr.catalog.create_parquet_table(
        db,
        new_name,
        path=wr.catalog.get_table_location(db, old_name),
        columns_types=wr.catalog.get_table_types(db, old_name),
        # TODO: partitions, etc
    )

然后如果你愿意的话,可以扔掉旧桌子。

DROP TABLE IF EXISTS <old_name>

0
投票

我知道这已经很旧了,但是对于寻求答案的新人,我无论如何都会写。

没有单个命令,但您可以使用 2 个命令轻松完成,无论是手动还是编程。 你会的

show create table `your_table`

然后将“创建外部表”命令复制粘贴到编辑器中,替换表名称并运行。

如果表包含非投影分区,您还需要运行此命令来检测并加载分区。

MSCK REPAIR TABLE `your_table`

您可以通过简单的正则表达式替换表名并重新运行来以编程方式执行相同的操作。当然,它比运行“CREATE TABLE ... AS SELECT ...”更复杂,但它是即时的、免费的,并且将保证指向 S3 中相同位置的相同结构。

© www.soinside.com 2019 - 2024. All rights reserved.