Slide 1

Slide 1 text

Glue Studio Visual ETL実装時にハマったこと K.Tamura

Slide 2

Slide 2 text

自己紹介 田村 晃輝 虎ノ門のどこかのSIer企業ででエンジニアしています JAWS-UG 富山 / SRE支部メンバー @koki46926199 元 富山県民 エンジニア歴 2年 AWS歴は1年ほど 最近までAWSマルチアカウント管理の設計、構築業務を担当 今日のトピック: JAWS-UG 富山のTシャツ着忘れました

Slide 3

Slide 3 text

はじめに 普段ETL処理をスクリプトで実装している人が、GUIで実装することができる AWS Glue Visual Editor を触ってみたら大ハマりしたよってお話です…

Slide 4

Slide 4 text

質問 みなさん AWS Glue って使ったことありますか?? AWS Glue

Slide 5

Slide 5 text

AWS Glue ざっくり概要 ・ データの変換・統合(Jobs) ・ データの品質管理(Data Quality) ・ オーケストレーション(Workflow) ・ メタデータ管理(Data Catalog, Connections) https://docs.aws.amazon.com/ja_jp/glue/latest/dg/components-key-concepts.html

Slide 6

Slide 6 text

AWS Glue ざっくり概要 ・ データの変換・統合(Jobs) ・ データの品質管理(Data Quality) ・ オーケストレーション(Workflow) ・ メタデータ管理(Data Catalog, Connections) https://docs.aws.amazon.com/ja_jp/glue/latest/dg/components-key-concepts.html

Slide 7

Slide 7 text

データの変換・統合(Jobs)の種類 ・ Script Editor(Python Shell, Spark, Ray) ・ Notebook ・ Visual ETL(Spark)

Slide 8

Slide 8 text

用語解説 各処理を表すボックスのことを ノード と呼びます

Slide 9

Slide 9 text

ハマったこと一覧 ・ Visual作成時はScriptタブで編集しない ・ 列の型推測について ・ Decimal型の取り扱い ・ Unionするときのテーブルの列順について ・ カスタムコードの実装 ・ (おまけ)DynamicFrame で発生するエラーの追い方

Slide 10

Slide 10 text

Visual作成時はScriptタブで編集しない スクリプトを編集してジョブを保存するとGUIでの編集が出来なくなります(Visualタブも消失) よって、Visualを編集する場合は、Visual上のみで編集を行いましょう。 https://docs.aws.amazon.com/ja_jp/glue/latest/dg/edit-nodes-script.html Edit scriptクリックすると注意書きを表示してくれます

Slide 11

Slide 11 text

列の型推測について Visual EditorでDBなどのソースからデータ取り込み時、推測して型変換してくれます 検証時、Unionしたタイミングで型推測して勝手にすべてStringに変換される事象が発生 これに気付かずに集計後テーブルにマージしてしまったので、型の不整合でエラーになりました…

Slide 12

Slide 12 text

データ型の修正 各ノードのOutput Schemaでも修正は可能ですが、次ノードで再度型推測される場合があります なので、DBに登録行う直前か結合後に Change Schemaで明示的に型変換するのが確実

Slide 13

Slide 13 text

Decimal型の取り扱い Change Schemaでも桁数指定ができないので SQLで明示的に型変換(CAST)する形で修正していました decimal(15,0)で定義しているデータが、なぜか小数点2桁で表示されてしまう データ型を確認したところdecimal(10,2)に自動的に型変換されていました

Slide 14

Slide 14 text

Unionするときのテーブルの列順について 列順を完璧に合わせてからUnionしましょう 列が各テーブルで合ってない(列数、命名)はエラーになってはくれますが 列順違ってもそのまま実行されて、データにNullが入ってきます さらにデータも想定した列に入っていないことから、使い物にならなくなるので注意しましょう

Slide 15

Slide 15 text

カスタムコードの実装 データフレームを使って変換するときに使う Custom Transform は 実施後にそのまま後続のノードを設定すると 変換したデータが反映されていません

Slide 16

Slide 16 text

カスタムコードを実装した場合に必要になること Custom Transform 後に Select From Collection を挟みましょう この中の 0 にCustom Transformで変換したデータが入ってます

Slide 17

Slide 17 text

(おまけ)エラーの追い方 「o404.py WriteDynamicFrameの呼び出し中にエラー」 といった、読んでも分からないエラーが出てきます この場合Cloudwatch logs を確認してみると詳細が書いてありますので、見てみましょう

Slide 18

Slide 18 text

(おまけ)エラーの追い方 ここまで追っていくことで、ようやくエラーの詳細が判明しました 今回は、factory_cd カラムに対して NULL を挿入しようと したことが原因で、エラーが発生しているようです

Slide 19

Slide 19 text

まとめ ・ Visual作成時はScriptタブで編集しない ・ データ型を各ノードで確認しながら実装しよう ・ カスタムコードの実装後は、 Select From Collection ノードでデータを取得しよう ・ DynamicFrame で発生するエラーは、 Cloudwatch logs を確認しよう

Slide 20

Slide 20 text

最後に JAWS-UG 富山 の宣伝 2025/05/10(土) Amazon Bedrock ハンズオン2本立てでやります! お時間ある方は、ぜひ一緒にハンズオンやりましょう タイムテーブル