Chat GPTがSQL文を書いてくれる・・・Twitterなどではそのようなつぶやきが見られます。おぉ、それはすごい。でも、どこまでのSQL文を書いてくれるのだろう。
この記事ではGChat GPT(4.0) がGA4がBigQueryにエクスポートしたテーブルを対象に、どこまでのSQL文を書いてくれるのだろうかを検証したいと思いいます。
GA4がBigQueryにエクスポートしたテーブルの特徴
GA4がBigQueryにエクスポートしたテーブルには、RECORD型というカラムがあります。一つのレコードの中に「テーブル」が存在する。そんなイメージのカラムです。以下の模式図では、青がレコードを表しており、合計2レコードあります。
一方、RECORD型のカラムがオレンジ部分です。テーブルには名前はevent_paramという名前がついていると考えてください。以下の模式図では、レコード中に存在するテーブルは3カラムで構成されており、それぞれのカラムに、key、value.string_value、value.int_valueのヘッダーがありますね。このような状態を「入れ子になっている」という意味でネストされている。と呼んだりします。
ネストされたテーブル内のデータ(上記の例では、page_titleや、ga_session_idや、percent_scrolled)を使って分析するには、少々複雑なSQL文を書く必要があります。
Chat GPTはRECORD型カラムを処理できるか? – お題
お題としては、以下としました。(それほど難易度は高くありませんが、それでもネストされたテーブル内のデータを取り出さなければいけないです。)
ページタイトル別のページビュー数、スクロール数、コンバージョン数を知りたい。それが分かるSQL文を書いて欲しい。
データは、このサイトに設置してあるGA4がエクスポートしたBigQueryのテーブルです。
以下が取得したい指標の詳細です。
- ページビュー数は、イベント page_viewの個数です。
- スクロール数は、パラメータ percent_scrolled の値が90のときの scrollイベントの個数です。対象のテーブルのscrollイベントに紐づくパラメータ percent_scrolled の値としては90の他に、25、50、75も存在する(タグをカスタマイズして、追加的に取得している)ので、90のときだけスクロール数とみなしたいです。
- コンバージョン数は purchaseイベントの発生回数です。ちなみに、このサイトのブログ記事の最後にある「宣伝」セクションから、アマゾンやUdemyにジャンプするリンクがおいてあることがあります。そのリンククリックをpurchaseイベントとしてトラッキングしています。
結論 – 問題なく適切なSQL文を書いてくれました
早速結論です。Chat GPTは、2、3往復のやりとりのあと、問題なく、適切に動くSQL文を書いてくれました。
以下がChat GPTが書いてくれたSQL文です。しかも、SQL文の下に記述してある「どのようなSQL文を書いたのか?」もかなり適切です。素晴らしい。
SQL文の実行結果
“Copy code”のボタンをクリックすることでSQL文がクリップボードにコピーされますので、コピーし、BigQueryのコンソールに貼り付けて実行した結果は以下の通りです。
プロンプト
上記のSQL文を書いてもらうために入力したプロンプトは以下の通りです。
工夫した点
工夫した点は、以下の通りです。
- Chat GPTの役割を定義:「優秀なエンジニア」としています。
- 留意点のメンション:テーブルのスキーマとその意味合いを考慮するように指示しています。
- BigQueryで動く関数を使って欲しい:BigQueryで動かすことを明示しています。
- データの種類:効いているかどうかわかりませんが、どのような種類のデータであるかを教えています。
- FROM句:BigQueryのテーブルは日次で別れています。そのため、複数の日を分析するには、_TABLE_SUFFIX関数が必要になります。その部分は、Chat GPTに考えてもらうのではなく、明示してあげました。ここを頑張ってもらう必要はないと思ったからです。
- スキーマの提示:ま、これは必須ですね。
- カラムの意味合いの明示:最後の段落で「要望」を人間語で指示していますので、どのカラムがどのような意味合いを持つのかを定義してあげています。
- 要望については簡潔に:まず一行目でやって欲しいことを言い切っています。それに対して「ただし、」で始まる行でどのような集計をすれば必要な指標が集計できるのかを指示しています。
紹介したプロンプトにたどり着くまでには、当然複数のプロンプトを試している訳ですが、Chat GPTの書いてくれるSQLは比較的不安定で、動くSQLを書いてくれる場合と、エラーのでるSQL文を書いてくれる場合がありました。
エラーが出た場合、ひるまずに、以下のようにエラーの内容をそのままコピーして修正を指示すると、エラーがでないSQL文を書いてくれます。
宣伝
フラットなテーブルに対してであれば、適切なSQL文を書いてくれるのだろう。とは想像していたのですが、ネストされたカラムを含むテーブルに対しても問題なくSQL文を書くChat GPTの能力、素晴らしいです。ただ、一人の人間としては、空恐ろしくもありました。この記事で紹介したSQL文を書くためには、人間は、おそらく30時間くらいの学習が必要だと思うんですよね。
しかし、Chat GPTは、エラーがでたときのやり取りを含めても、ものの数分で適切な結果が返ってくるSQL文を書いてくれたんですよね。(最初のプロンプト開発、つまりChat GPTにプロンプトを打ち込むまでには15分くらいかかっています。)修正も、エラーメッセージを貼り付ければ良いだけですし、「SQLを知らなくてもSQL文を手にすることができる」時代になったと言えるのではないかと思います。
ただし、人間としては、そのSQL文が正しいか?をチェックする必要はあります。英語で言えば、ライティング(=自分で書くこと)はできなくてもまぁ良いが、リーディング(=人の書いた文を読むこと)はできなきゃだめ。みたいな感じでしょうか?
こちらの講座、SQLを書けるようになることをゴールとしていますが、もちろん、読めるようにもなります。はい。