10

AWS 爬虫具有用于添加新表的前缀属性。因此,如果我将前缀留空并启动爬虫,s3://my-bucket/some-table-backup它会创建带有 name 的表some-table-backup。有没有办法将其重命名为my-awesome-table并保持爬虫更新重命名的表?或者设置爬虫以使用提供的名称创建新表?

4

4 回答 4

6

无法设置爬虫来执行此操作,但是创建一个与爬虫创建的表在各个方面都相同的新表非常快,除了名称。在Python中:

import boto3

database_name = "database"
table_name = "prefix-dir_name"
new_table_name = "more_awesome_name"
    
client = boto3.client("glue")
response = client.get_table(DatabaseName=database_name, Name=table_name)
table_input = response["Table"]
table_input["Name"] = new_table_name

# Delete keys that cause create_table to fail
table_input.pop("CreatedBy")
table_input.pop("CreateTime")
table_input.pop("UpdateTime")
table_input.pop("DatabaseName")
table_input.pop("IsRegisteredWithLakeFormation")
catalog_id = table_input.pop("CatalogId")
client.create_table(
 DatabaseName=database_name, 
 TableInput=table_input, 
 CatalogId=catalog_id
)
于 2018-06-06T14:39:23.813 回答
2

扩展 Dan 的解决方案,但使用分区表。

import boto3

database_name = "some_database"
table_name = "old_table_name"
new_table_name = "new_table_name"

client = boto3.client("glue", region_name='us-east-1')
response = client.get_table(DatabaseName=database_name, Name=table_name)
partitions = client.get_partitions(DatabaseName=database_name, TableName=table_name)["Partitions"]
table_input = response["Table"]
table_input["Name"] = new_table_name

# Delete keys that cause create_table to fail
table_input.pop("CreatedBy")
table_input.pop("CreateTime")
table_input.pop("UpdateTime")
table_input.pop("DatabaseName")
table_input.pop("IsRegisteredWithLakeFormation")

# Delete unnecessary keys in partitions
for partition in partitions:
    partition.pop("DatabaseName")
    partition.pop("TableName")
    partition.pop("CreationTime")

# Create new table table
client.create_table(DatabaseName=database_name, TableInput=table_input)

# Create partitions
client.batch_create_partition(DatabaseName=database_name, TableName=new_table_name, PartitionInputList=partitions)
于 2021-04-22T20:10:08.567 回答
2

遇到了同样的问题。在可以在 Redshift 中查询表之前,需要删除比 Dan Hook 的答案更多的属性。

table_input="$(aws glue --region us-west-2 get-table --database-name database --name old_table --query 'Table' | jq '{Name: "new_table", StorageDescriptor, TableType, Parameters}')"

aws glue create-table --region us-west-2 --database-name database --table-input "$table_input"
aws glue delete-table --region us-west-2 --database-name database --name "old_table"
于 2020-04-15T21:26:53.937 回答
0

正如丹所提到的,爬虫不能重命名表。在粘合作业中使用 python 脚本重命名或在 amazon-athena 中创建一个新的外部配置单元表并将其指向旧表的位置。

于 2018-06-07T18:25:38.530 回答