Yos*_*ein 2 amazon-web-services amazon-athena aws-glue aws-glue-data-catalog
我在 AWS 胶水中定义了几个表。
在过去的几周里,我遇到了必须手动修复的表定义的不同问题 - 我想更改列名或类型,或者更改序列化库。但是,如果我已经创建了分区,表的修复不会改变它们,所以我必须手动删除所有分区然后修复。
有没有一种简单的方法可以做到这一点?从 AWS Glue 表中删除所有分区?我正在使用aws batch-delete-partitionCLI 命令,但它的语法很棘手,并且一次性删除的分区数量有一些限制,整个过程很麻烦......
Gol*_*ott 10
将 python3 与 boto3 一起使用看起来更好一些。虽然不是很多:)
不幸的是,AWS 不提供一种在不一次批处理 25 个请求的情况下删除所有分区的方法。请注意,这仅适用于删除检索到的分区的第一页。
import boto3
glue_client = boto3.client("glue", "us-west-2")
def get_and_delete_partitions(database, table, batch=25):
partitions = glue_client.get_partitions(
DatabaseName=database,
TableName=table)["Partitions"]
for i in range(0, len(partitions), batch):
to_delete = [{k:v[k]} for k,v in zip(["Values"]*batch, partitions[i:i+batch])]
glue_client.batch_delete_partition(
DatabaseName=database,
TableName=table,
PartitionsToDelete=to_delete)
Run Code Online (Sandbox Code Playgroud)
编辑:使用分页器删除所有分区(除了第一页之外)使其看起来更干净。
import boto3
glue_client = boto3.client("glue", "us-west-2")
def delete_partitions(database, table, partitions, batch=25):
for i in range(0, len(partitions), batch):
to_delete = [{k:v[k]} for k,v in zip(["Values"]*batch, partitions[i:i+batch])]
glue_client.batch_delete_partition(
DatabaseName=database,
TableName=table,
PartitionsToDelete=to_delete)
def get_and_delete_partitions(database, table):
paginator = glue_client.get_paginator('get_partitions')
itr = paginator.paginate(DatabaseName=database, TableName=table)
for page in itr:
delete_partitions(database, table, page["Partitions"])
Run Code Online (Sandbox Code Playgroud)
现在,我找到了这个命令行解决方案,使用aws glue batch-delete-partition迭代为 25 个分区的批次运行xargs
(这里我假设最多有 1000 个分区):
aws glue get-partitions --database-name=<my-database> --table-name=<my-table> | jq -cr '[ { Values: .Partitions[].Values } ]' > partitions.json
seq 0 25 1000 | xargs -I _ bash -c "cat partitions.json | jq -c '.[_:_+25]'" | while read X; do aws glue batch-delete-partition --database-name=<my-database> --table-name=<my-table > --partitions-to-delete=$X; done
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人,但我更喜欢更优雅的解决方案
| 归档时间: |
|
| 查看次数: |
3545 次 |
| 最近记录: |