0
1

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 1 year has passed since last update.

AWS Glue Studio に追加になったTransformを試してみた - 202302

Last updated at Posted at 2023-02-03

背景・目的

AWS Glue Studio Visual ETL now supports 5 new transformsのとおり、Glue Visual Studioで5つのTransformが追加になったので試してみます。

まとめ

  • Glue Studioに5つのTransformが追加されました。
    • Identifier
    • UUID
    • flatten
    • Format timestamp
    • To timestamp

概要

今回追加になったのは、下記のTransformです。いずれも新しいカラムを追加できる機能のようです。

  • Identifier
    • データセットの各行に数値識別子を割り当てる。
  • UUID
    • UUID (Universally Unique Identified) 列を追加すると、各行に一意の 36 文字の文字列が割り当てられる。
  • flatten
    • データ内のネストされた構造体のフィールドをフラット化して、それらがトップレベルのフィールドになるように変換する。
    • 新しいフィールドは、それに到達する構造体フィールドの名前を前に付けたフィールド名を使用して、ドットで区切られた名前が付けられます。
    • 例を下記に記載する。
      {phone_numbers:{country_code,number}}
      ↓
      {phone_numbers.home_phone.country_code,phone_numbers.home_phone.number}
      
  • Format timestamp
    • タイムスタンプ列をパターンに基づいて文字列にフォーマットする。 日付と時刻を目的の形式の文字列として取得できる。
    • 形式は、Spark の日付構文とほとんどの Python 日付コードを使用して定義可能とのこと。
    • 例えば2023-01-01 00:00のように変換するには、yyyy-MM-dd HH:mmを指定する。
  • To timestamp
    • 数値列または文字列列のデータ型をタイムスタンプに変更し、そのデータ型で格納したり、タイムスタンプを必要とする他の変換に適用したりできる。

実践

追加になったTransformについて試してみます。

前準備

下記のようなテストデータをS3バケットに配置しておきます。

$ aws s3 cp  s3://{バケット名}/input/transform.json - | jq
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods": {
    "goods_id": "g-00001",
    "price": "1000"
  }
}
$

Transformを追加

下記のように5種類のTransformを追加しました。
image.png

設定値は下記のとおりです。

Transform 新しいカラム名 備考
identifier added_id
UUID added_uuid
Flatten
to timestamp converted_updated_on Column typeは「autodetect」を指定しています。
format converted_created_on ・timestamp型に変換した、「timestamp_created_on」をインプットにしています。
・formatはyyyy-MM-dd'T'HH:mm:ss.SSSZとしています。

実行確認

  1. ジョブを実行しました。Succeededになりました。
    image.png

  2. outputバケットにそれぞれファイルが作成されていました。
    image.png

1.作成されたファイルの内容を確認します。

Identifier

  • 行末に0から始まるIDが追加されています。
$ aws s3 cp s3://{バケット名}/output/identifier/run-1675387477729-part-r-00000 - | jq                
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods": {
    "goods_id": "g-00001",
    "price": "1000"
  },
  "added_id": 0
}
$ 

UUID

  • 行末にUUIDが追加されています。
$ aws s3 cp s3://{バケット名}/output/uuid/run-1675387486264-part-r-00000 - | jq
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods": {
    "goods_id": "g-00001",
    "price": "1000"
  },
  "added_uuid": "b59548c9-461f-4a52-904f-ccd0d6c4c9c0"
}
$

Flatten

  • ネストされたgoods->priceとgoods_idがドット(.)形式に変換されています。
$ aws s3 cp s3://{バケット名}/output/flatten/run-1675387468148-part-r-00000 - | jq
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods.goods_id": "g-00001",
  "goods.price": "1000"
}
$

To timestamp

  • UNIXタイムスタンプの値が変換されていることが確認できました。
$ aws s3 cp s3://{バケット名}/output/to_timestamp/run-1675387460522-part-r-00000 - | jq
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods": {
    "goods_id": "g-00001",
    "price": "1000"
  },
  "converted_updated_on": "2023-02-03 00:27:33.0"
}
$

Format

  • converted_create_onを見ると、指定したフォーマット「yyyy-MM-dd'T'HH:flag_mm:ss.SSSZ」形式で出力されてることがわかります。
$ aws s3 cp s3://{バケット名}/output/format_timestamp/run-1675387494914-part-r-00000 - | jq
{
  "order_id": "00001",
  "org_created_on": 1675414800,
  "org_updated_on": 1675384053,
  "goods": {
    "goods_id": "g-00001",
    "price": "1000"
  },
  "timestamp_created_on": "2023-02-03 09:00:00.0",
  "converted_created_on": "2023-02-03T09:00:00.000+0000"
}
$

考察

連番を振りたいケースやユニークなIDを手軽に採番できるのは、とても便利だと感じました。

参考

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?