2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Glueの使い方的な㊹(S3データセットの操作 Transition/Purge)

Last updated at Posted at 2020-05-10

GlueContextクラスのtransition_tableを使ってS3のストレージクラスを変更する

この機能のリリース
https://aws.amazon.com/jp/about-aws/whats-new/2020/01/aws-glue-adds-new-transforms-apache-spark-applications-datasets-amazon-s3/

この機能のドキュメント
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html

対象のGlueテーブルの実際のS3オブジェクトのストレージクラスをGlacierやIAに変更します。ジョブの最後に必要ならストレージクラスを変更したり、大量データに対しては1つのジョブにしてワークフローの最後に行ったり定期実行するなど良さそう。

ジョブの内容

JupyterNotebookで、GlueテーブルのS3オブジェクトのストレージクラスを変更します。

全体の流れ

  • 前準備
  • ジョブ実行
  • 確認
  • その他:transition_s3_path/purge_table/purge_s3_path

前準備

ソースデータ

2つのcsvデータを用意しS3にアップロードしておく。S3ストレージクラスはスタンダードです。

cvlog1.csv
cvlog2.csv

スクリーンショット 0002-05-10 8.48.37.png

cvlog1.csv

今回データの中身はどうでもいいのですが、一応以下のようなデータが入っています。

cvlog1.csv
deviceid,uuid,appid,country,year,month,day,hour
iphone,11111,001,JP,2017,12,14,12
android,11112,001,FR,2017,12,14,14
iphone,11113,009,FR,2017,12,16,21
iphone,11114,007,AUS,2017,12,17,18
other,11115,005,JP,2017,12,29,15
iphone,11116,001,JP,2017,12,15,11
pc,11118,001,FR,2017,12,01,01
pc,11117,009,FR,2017,12,02,18
iphone,11119,007,AUS,2017,11,21,14

cvlog2.csv
deviceid,uuid,appid,country,year,month,day,hour
other,11110,005,JP,2017,11,29,15
iphone,11121,001,JP,2017,11,11,12
android,11122,001,FR,2017,11,30,20
iphone,11123,009,FR,2017,11,14,14
iphone,11124,007,AUS,2017,12,17,14
iphone,11125,005,JP,2017,11,29,15
iphone,11126,001,JP,2017,12,19,08
android,11127,001,FR,2017,12,19,14
iphone,11128,009,FR,2017,12,09,04
iphone,11129,007,AUS,2017,11,30,14
スクリーンショット 0002-05-10 12.56.24.png

ジョブ実行

【参考】公式ページから引用↓

glueContext.transition_table("database", "table", "STANDARD_IA", {"retentionPeriod": 1, "excludeStorageClasses": ["STANDARD_IA"], "manifestFilePath": "s3://bucketmanifest/", "accountId": "12345678901", "roleArn": "arn:aws:iam::123456789012:user/example-username"})

JupyterNotebookを起動します。
手順はこの辺を参考にしてもらえたらと
https://qiita.com/pioho07/items/29bd779f84b4add9cf2c

以下のコードでジョブを作成し実行する。内容は"se2_in12"という名前のテーブルのS3オブジェクトのストレージクラスをIAに変更します。
※「retentionPeriod」のオプションの意味がドキュメント見ても分かりづらいのですが、要するに「指定した期間は変換の対象にしません」という意味になります。今回は"retentionPeriod 0"を指定することでいつ実施してもストレージクラスの変換を行いますが、例えば"retentionPeriod 1"と指定すると、オブジェクトのタイムスタンプが1時間経過していなければストレージクラス変換の対象にしません。ストレージクラスだけ変換してもタイムスタンプは更新されます。一定時間経ったオブジェクトだけストレージクラスをIAやGlacierに変換するということができますね。そういうオプションだと思います。

transitionjob
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

glueContext.transition_table("se2", "se2_in12", "STANDARD_IA", {"retentionPeriod": 0, "manifestFilePath": "s3://test-glue00/se2/manifest/", "accountId": "<aws account id>", "roleArn": "arn:aws:iam::<aws account id>:role/test-glue"})
スクリーンショット 0002-05-10 12.56.02.png

パラメータ

  • database – 使用するデータベース。

  • table_name – 使用するテーブルの名前。

  • transition_to – 移行先の Amazon S3 ストレージクラス。

  • options – 削除するファイルとマニフェストファイルの生成のためのファイルをフィルタリングするオプション。

  • retentionPeriod – ファイルを保持する期間を時間単位で指定します。保存期間より新しいファイルは保持されます。デフォルトでは 168 時間(7 日)に設定されています。

  • partitionPredicate – この述語を満たすパーティションは移行されます。これらのパーティションの保存期間内のファイルは移行されません。デフォルトでは "" – 空に設定されます。

  • excludeStorageClasses – excludeStorageClasses セット内のストレージクラスを持つファイルは移行されません。デフォルトは Set() – 空白のセットです。

  • manifestFilePath – マニフェストファイルを生成するためのオプションのパス。正常に移行されたすべてのファイルが Success.csv に記録され、失敗したファイルは Failed.csv に記録されます。

  • accountId – 移行変換を実行する AWS アカウント ID。このトランスフォームには必須です。

  • roleArn – 移行変換を実行する AWS ロール。このトランスフォームには必須です。

  • transformation_ctx – 使用する変換コンテキスト (オプション)。マニフェストファイルパスで使用されます。

  • catalog_id – アクセス中の データカタログ のカタログ ID(データカタログ のアカウント ID)。デフォルトでは、None に設定されています。None のデフォルト値は、サービス内の呼び出し元アカウントのカタログ ID になります。

確認

S3オブジェクトの確認

対象の2つのS3オブジェクトのS3ストレージクラスが、スタンダード->IAに変更されました。

スクリーンショット 0002-05-10 9.34.53.png

マニフェストファイル確認

test-glue00/se2/manifest/配下にマニフェストファイルとして正常に移行されたすべてのファイルが success配下に、失敗したファイルは failure配下にファイルとして記録されます。
※ドキュメントではsuccess.csvファイルに出力とあるが現状の動作はsuccessフォルダにrun-xxx-part-r-xxxという名前のファイルが出力されます。

スクリーンショット 0002-05-10 9.23.21.png

成功したのでSUCCESS配下のファイルをS3 Selectで表示してみます。

スクリーンショット 0002-05-10 9.24.38.png

今回の対象となった「S3バケット、パス/オブジェクト名」が示されてます。

スクリーンショット 0002-05-10 9.24.02.png

#その他:transition_s3_path/purge_table/purge_s3_path

使い方としては今回紹介したtransition_tableとほとんど同じです。オプションなども似ています。

  • transition_s3_path

S3パスを指定してS3ストレージクラスの変更

  • purge_table

テーブルのオブジェクトの削除

  • purge_s3_path

S3パスを指定してオブジェクトの削除

こちらも是非

Glueの使い方まとめ
https://qiita.com/pioho07/items/32f76a16cbf49f9f712f

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?