【AWS】AWS Glue ~ Boto3 / パーティション操作編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/05/28/142153

のAWS Management Console画面において、
パーティションを個別で削除しようと思ったが、
画面からは削除できなかったため、
代わりに、Boto3のAPIを使って、削除した。
(ちなみに、パーティション設定の閲覧は可能)

 そこで今回は、
Boto3 APIでのパーティション削除などの操作について、
メモしておく。
(今後もテストなどで使用しそうだし)

なお、テーブル操作については、以下の関連記事を参照のこと。

AWS Glue ~ Boto3 / DB・テーブル操作編 ~
https://dk521123.hatenablog.com/entry/2021/06/11/164015

目次

【0】Boto3 API仕様
【1】パーティション削除
【2】パーティション取得
【3】パーティション追加
【4】パーティション更新

【0】Boto3 API仕様

* 基本、以下を探れば、使用したいAPIは見つかるはず。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#client

【1】パーティション削除

* delete_partition() を使えばいい。
* 事前に削除対象のパーティションの存在チェックをしたい場合
 「【2】パーティション取得」のAPIと組み合わせればいい

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.delete_partition
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-DeletePartition

response = client.delete_partition(
    CatalogId='string',
    DatabaseName='string',
    TableName='string',
    PartitionValues=[
        'string',
    ]
)

サンプル

#  ここが理解できれば、後は惰性でできると思う
import boto3
try:
  from botocore.exceptions import BotoCoreError, ClientError
except ImportError:
  pass

# 削除対象の情報
target_db = 'sample_db'
target_table = 'person'
target_partition_value = '2021-06-01'

try:
  glue_client = boto3.client('glue', region_name='us-west-2')

  response = glue_client.delete_partition(
      DatabaseName=target_db,
      TableName=target_table,
      PartitionValues=[target_partition_value]
  )
  print(response)
except(BotoCoreError, ClientError) as ex:
  if ex.response['Error']['Code'] == 'EntityNotFoundException':
    print('The partition has been already deleted...')
  else:
    print('Error ' + str(ex))

print("Done")

補足:batch_delete_partition() について

* 複数パーティションを一気に削除したい場合に使用する

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.batch_delete_partition

response = client.batch_delete_partition(
    CatalogId='string',
    DatabaseName='string',
    TableName='string',
    PartitionsToDelete=[
        {
            # ★違いは、ここが複数値を渡せる点
            'Values': [
                'string',
            ]
        },
    ]
)

【2】パーティション取得

* get_partition() / batch_get_partition() / get_partitions() を使う

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.get_partition
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.batch_get_partition
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.get_partitions

【3】パーティション追加

* create_partition() / batch_create_partition() を使う

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_partition
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.batch_create_partition

【4】パーティション更新

* update_partition() / batch_update_partition() を使う

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.update_partition
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.batch_update_partition

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ 基本編 / クローラ ~ https://dk521123.hatenablog.com/entry/2019/12/01/003455
AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / 基本編 ~
https://dk521123.hatenablog.com/entry/2021/04/17/001930
AWS Glue ~ Boto3 / セキュリティ設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/08/171208
AWS Glue ~ Boto3 / Glue connection編 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525
AWS Glue ~ Boto3 / DB・テーブル操作編 ~
https://dk521123.hatenablog.com/entry/2021/06/11/164015
AWS Glue ~ クローリング結果の確認画面 ~
https://dk521123.hatenablog.com/entry/2021/05/28/142153
Glue から DataCatalogテーブル に対して Spark SQLを実行する
https://dk521123.hatenablog.com/entry/2021/05/11/220731
Glue Job から パーティションを更新することを考える
https://dk521123.hatenablog.com/entry/2021/05/15/130604
テーブルアクセス時に例外「Vertex failed, ... InvalidInputException」が発生する
https://dk521123.hatenablog.com/entry/2021/07/06/120134