trocco®のETL設定にChatGPT使ってみた

# はじめに
株式会社ジールの@suguru_y_zdh です。
AWSを使ったデータ分析基盤関係の業務に従事しています。
その中で得たノウハウをQiitaをとおして発信していきたいと思います。

今回は分析基盤の総合支援ツールtrocco®のデータ転送時のETL設定（プログラミングETL）にChatGPTが使えるかどうか検証した記事です。

なお、今回の記事はtrocco®、AWS、ChatGPTの諸々の準備ができている前提の内容になっています。



# 利用環境
Windows 10


# 準備物
・trocco®
　接続情報

・ChatGPT
　OpenAIのアカウント作成

・AWS
　S3（バケット、バケットポリシー）
　IAMロール

・サンプルデータ
　

# 検証内容
**trocco®のデータ転送時のETL設定（プログラミングETL）のコードをChatGPTに作成させ実行できるか、実行結果が想定したものになるか検証する**

trocco®には標準機能のテンプレートETLとオプション機能のプログラミングETLが存在します。
プログラミングETLとは転送設定時にプログラミング言語(現在はRubyとPythonに対応)で変換処理を自由に記述することができる機能です。
標準機能ではフィルター、マスキング、転送日時打刻、文字列の変換・ハッシュ化などができます。
今回は標準機能で対応していない演算のETL処理を実施します。
　

# 作業内容
■転送設定の作成
①転送元をS3、転送先にS3を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/84a16c87-29f1-e392-db30-8dcebbc3e12d.png)

②転送元Amazon S3の設定します。
S3接続情報やバケット、パスプレフィックスの項目を入力し、その他の項目はデフォルトのまま設定します。（この例では事前に用意した接続情報を指定します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/6041244d-bb9d-0b96-8d87-3423b72c8584.png)


③転送先Amazon S3を設定します。
転送元と同様にS3接続情報やバケット、パスプレフィックス等の必須項目を設定します。
今回サンプルデータで容量も多くないため転送モードは出力ファイル数抑制転送(1ファイル出力)を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/0509211e-ecc1-25b7-15e4-27dc1171eb0f.png)


次のステップに移行して、データプレビューやカラムの定義に問題ないことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/892fbfa4-2b30-0e22-12a6-7bf1e2e683ad.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/fcf01982-ba4a-0955-af24-c03ff4cf6b35.png)

④ETL設定の『プログラミングETLを利用する』にチェックを入れ、ソースコードにPython3.9を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/d5aa9c64-0bad-a96f-1af3-35b731225634.png)


⑤ChatGPTにプログラミングETLのテンプレートコードを用いて、カラムの情報や求める結果を以下のように質問します。
```py:qiita.py
下記の条件からpythonでETL処理を作成する

・データの概要
cash_id,cash_data,cash_customer_id,cash_item_id,cash_item_name,cash_itme_r,cash_amount_1,cash_source

・求める結果
cash_itme_r,cash_amount_1を掛け算した結果をtotalというカラムで出力する

・コードのテンプレート
from etl_base import EtlBase

class Etl(EtlBase):
  # def __init__(self):
  #   pass

  def transform_row(self, row):
    # row["new_column"] = "trocco"
    return row

  # def before_action(self):
  #   pass
```


⑥ChatGPTで得られた結果を貼り付け、テスト実行します。
```py:qiita.py
from etl_base import EtlBase

class Etl(EtlBase):
    def transform_row(self, row):
        row["total"] = row["cash_itme_r"] * row["cash_amount_1"]
        return row

    def before_action(self):
        pass
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/ed178012-8e38-3099-78ea-0c168cf4b11c.png)

totalカラムが追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/a549e3e6-ae91-b503-44ca-d35a95163225.png)


確認画面へ移行し、保存して適用を選択します。


■転送設定実行
⑦転送を実行します。
作成した転送設定を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/2239d4af-8eef-0cc9-11a7-549ef23b84df.png)

⑧出力結果の確認します。
出力先のS3に格納されているcsvファイルの中身を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/f8076907-fdd7-848d-c35c-185528f1f3f6.png)


totalというcash_itme_r,cash_amount_1を掛け算したカラムが追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777457/962fe271-aeea-957d-0db1-e27288fa358f.png)



# まとめ
trocco®のETL設定にChatGPTが利用できることを検証しました。
今回は簡単な演算のみでしたが、プログラミング内容を修正することで要件に合うよう様々な設定が可能です。

trocco®のプログラミングETLに興味があるが、コーディングに苦手意識がある方や初心者の方はChatGPTを用いてみてはいかがでしょうか。

#
株式会社ジールでは、初期費用が不要で運用・保守の手間もかからず、ノーコード・ローコードですぐに手元データを分析可能なオールインワン型データ活用プラットフォーム「ZEUSCloud」を提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/