【2025/05アップデート】AWS GlueのビジュアルETLでExcelファイルをソースにできるようになりました

# はじめに
株式会社ジールの @oreo_tです。
2025年5月のアップデートで、AWS GlueのビジュアルETLでExcelファイルをソースにできる機能が追加されたので紹介しようと思います。

# 今回の更新情報
ビジュアルETLはコンソールのGUIのみで処理構築ができるもので、データソースとしてS3を選択した場合はcsvやjsonといったファイル形式を利用できましたが、Excelファイルをソースとすることはできませんでした。
それが、今回のアップデートで利用できるようになりました。
また、同時に出力ファイル数を自分で設定できるという機能も追加されたため合わせて紹介します。

公式の記事は以下のリンクを参照してください。
https://aws.amazon.com/about-aws/whats-new/2025/05/aws-glue-studio-file-types-single-file-output/

利用方法や注意点について見ていきましょう。

# Excelファイルをソースとする設定方法

まずはGlueでビジュアルETLのページに移動し、「Create Job」でビジュアルETLを選択して構築画面に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/aaf88b3a-812c-43a7-99f8-5689e9fb46a9.png)

この画面で左のウィンドウから「Amazon S3」を選択してソースのノードを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/da771c43-ab87-41ba-8c67-4799582a7dec.png)

データソースの設定をします。今回はS3に置いたExcelファイルをソースとするので、ソースタイプは「S3 location」、S3 URLはファイルパスを指定、データ形式は「Excel」とします。
このデータ形式が今回新たにアップデートで選択できるようになったものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/a916dc2e-54a7-488a-8897-79cb1d6a058e.png)

IAMロールを設定してデータプレビューをすると、中のデータが正常に表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/3e735235-3dad-4e4d-bbc0-3e8f05a77913.png)

今回はこのようなデータを用意しています。
A、B、C列には数値が入っていてD列にはその合計を関数で出すようになっています。
関数で出している値でもプレビューでは数値として表示されているのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/3f46bad6-5657-4c00-addb-74e1d3bae1a3.png)

続いてターゲットの設定もしていきます。
S3の出力先パスや出力形式を選択した後、今回のアップデートで「File partitioning」の設定項目が追加されました。
ここで「Multiple file output」を選択することで、従来はGlueが自動的にファイル分割をしていたものを、自分でファイルの分割数を設定できるようになります。
ここで「1」を入力することで分割しないこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/f13e5dd3-4521-4d0f-890d-d24312e88ebc.png)

今回はソースとターゲットの確認のため、加工は行わずこの内容で処理を実行したいと思います。

実行後、出力先にファイルができていました。
オプションで指定した通り1ファイルになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/09d4c1b3-e4d0-4a5d-82db-2bb4ed10494e.png)

ダウンロードして中身を見てみると、プレビューにも表示されていた内容と同じものがcsvとして書き出されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/0223af99-17c2-44e6-a4d2-4df839d1a909.png)

このように、Excelファイルを入力としたデータ抽出ができました。
続いて、使用についてポイントを解説します。

# 仕様について
#### pythonのコード上の仕様
ソースコードを見ると、pandasのread_excelを利用して読み込んでいることが分かります。
この関数をこのような形式で実行した場合、Excelファイルの1シート目のみを読み込みます。
そのため、複数シートに渡って表があるようなExcelファイルでも1シート目しか読み込まれないため注意が必要です。
また、必ず1行目をヘッダーとして扱うため、ヘッダー無しのExcelファイルは正常に読み込めないことにも注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/89f48557-5aac-4c52-aa4e-56812324e9c2.png)

また、分割ファイル数の設定についてはここに表れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/6b54c8cd-f8a3-4da5-95f5-6254576d5ee9.png)
抽出・加工後のDynamicFrameの分割が指定したオプションのファイル数以上だった場合、指定した数になるようにcoalesceでDynamicFrameが再構築されます。

#### 再帰オプションについて
ソースがcsvファイルなどであれば、ソース設定の「Recursive」にチェックを入れ、S3 URLにフォルダまでを指定することで、フォルダ配下のファイルをすべて読み込んでくれます。
しかし、ソースをExcelファイルにした場合、pandasのread_excelを利用する都合上単一ファイルしか読み込めず、フォルダ名までを指定してRecursiveにチェックを入れても実行時にエラーが発生してしまいます。
これについては、実行でエラーになるものの設定自体はできてしまうため注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/38a29e9c-1604-4e29-81d9-b7f95364a084.png)


# まとめ
ビジュアルETLはプログラミングに詳しくない人でもノーコード開発ができるというメリットがあるため、業務で使うことも多いExcelファイルが対応したのはそういったユースケースともマッチしていて良いかと思いました。
その反面、1シートしか読み込めないなどの制約もあるため、複数シートからの読み取りをしたい場合はビジュアルETLではなく従来のコーディングで対応する、といった使い分けができるとジョブ構築が効率的にできるのではないかと思います。


***
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area