背景・目的
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を追加
設定値は下記のとおりです。
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.作成されたファイルの内容を確認します。
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'HHss.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を手軽に採番できるのは、とても便利だと感じました。
参考