BigQuery初心者のマーケターがChatGPTにSQLを書かせている話

JADEアドベントカレンダー5日目は、どうすればChatGPTに望み通りのSQLを書いてもらえるかの奮闘記です。

二度目ましてこんにちは、コンサルタントの小坂です。

本記事はJADE Advent Calendar 2023 5日目の記事です。どこかでなんか書こうと思っていたらあっという間に空きが埋まっていき、JADEのみなさんのアドベントカレンダーへのやる気がすごいと私の中で話題です。

adventar.org

そんな中で私はBigQueryでデータ抽出をするためにChatGPTと戯れている話を書こうと思います。

BigQuery初心者のマーケターがSQLと向き合う

突然ですが私はBigQuery初心者です。(と言い張っています)

BigQueryの存在と概要的な知識はあったもののJADEに入ってから初めてBigQueryに触りました。ちなみに2022/06入社です。

SQLは過去に勉強し業務で使っていたのであまり難易度が高くないものなら自力で書ける程度です。

先日、弊社ファウンダーの長山がこのようなブログを書きました。とても学びがある内容のでぜひこちらもあわせて読んでいただけると嬉しいです。

blog.ja.dev

私が今回着目したのは「SQL が書ける、ということが本質ではない」という部分です。

どういうテーブルがあり、そこからどういうデータを取り出したいのか?ということを明確にしていればChatGPTなどを活用することでSQLはなんとかできる、と。

なるほどたしかに。

と思ってChatGPTにSQLを書かせようとしてもなかなかうまく実行できるSQLが返ってこない経験をした人もいるのではないでしょうか。

私はよくあります。

そんな繰り返しの中、なるべく自力でSQLを書かずにやりたいことをある程度実現できるようになってきたので、ChatGPTへどのように情報を与えているかを紹介します。

ちなみに、JADE内ではGoogle ChatでGPTが元気に稼働しています。

アドベントカレンダー1日目にエンジニアの大井が記事を書いているのでこちらも興味があればあわせてご覧ください。

blog.ja.dev

私とGPTとのやりとり

ここからは実際にどのようなやりとりが行われてきたか、一例をあげてご紹介します。

例1. BigQueryの公開データセットからデータを取り出す

BigQueryにはあらゆる気象データが入っている公開データセットがあります。

気温の推移を分析に活用すべく、ChatGPTにSQLを書いてもらいました。

説明を読むと、2021年以降のデータテーブルはこのSQLだと見られないようです。これも依頼してみました。

長いので後半は省略しています

それっぽいSQLが得られたので実行してみたところ、エラーがでてしまいました。

素直に相談します。人にこのまま聞くのは申し訳ないなと思うようなことでも遠慮なく送ってしまえるのがChatGPTのいいところですね。

長いので後半は省略しています

無事実行でき、結果が返ってきました!しかし東京の気温なのに軒並み40度超え……なにかがおかしい。

デスバレーでもそんなことないぞ

なにか誤りがあるのでは?と思ってSQLを読み解こうと試みるも1分で挫折。ChatGPTにそのまま相談します。

「なぜ数字がおかしいと思ったのか」という理由を明記したうえでSQLの書き直しを要求しました。

長いので後半は省略しています

華氏という盲点!!!!!摂氏に直してもらい無事に解決しました。これは自分で調べていたら数分ではすまなかったように思います。

例2. 既存のテーブルの情報を与えてSQLを作る

1.で例示したBigQueryの公開データセットはChatGPTがテーブル名やカラムの情報を持っていたのでインプットする必要がありませんでしたが、独自のものを使う場合はテーブル構成などもChatGPTに伝える必要があります。

なるべく意図が伝わりやすいよう、私はこのように具体例を送るようにしています。

架空の賃貸サイトのクエリ・クエリパターンが格納されている2つのテーブルを例にとり、その中からランダムでクエリを抽出したいという指示

その結果、意図した結果が得られるSQLが一発で返ってきました🎉

ChatGPTにSQLを書かせるときに大事だと思うポイント

ChatGPTとやりとりを繰り返す中で、意図したとおりのSQLを返してもらうには以下のポイントが大事そうだな、と思うようになりました。

  1. 入力・出力の要件をなるべく細かく書く
  2. 文章で説明しづらい場合はテーブル構成を例を挙げつつ書く

特に1.がかなり重要で、日本語は省略可能な部分が多い言語なのでつい省略してしまいがちですが、くどいくらいしっかりと指示を書いたほうが良いことが多いです。

長山の記事に立ち返ると「データを知り、加工し、可視化する」ことが重要と書かれています。

  • データを知る → ChatGPTに与えるべき入力要件
  • 可視化する → ChatGPTに与えるべき出力要件

ともいえるので、どういうテーブルがあってそこからどういうデータを取り出したいのか?を具体的に明確化することはやはり重要だと再認識しました。

前述した例2で挙げていた指示は一度も「BigQuery」や「SQL」という表現を使っていないので本当は良くない例です。

良くない例

今書き直すとしたらこんな感じでしょうか。

BigQueryを使って以下の要件を実現するSQLを書いてください。

●入力
以下のような2つのテーブルがある。
1.
テーブル名:queries
カラム名:query_pattern, query

テーブル詳細例:
query_pattern   query
人気条件×賃貸    大型犬可 賃貸
人気条件×賃貸    新築 賃貸
人気条件×賃貸    築浅 賃貸
ターゲット×賃貸  二人暮らし 賃貸
都道府県×賃貸    東京 賃貸
都道府県×賃貸    大阪 賃貸
...

2.
テーブル名:pattern_count
カラム名:query_pattern, nav_count

テーブル詳細例:
query_pattern   nav_count
人気条件×賃貸    3
ターゲット×賃貸   6
都道府県×賃貸    32
...

●出力
カラム:query_pattern, queryの2カラム

query_patternごとにpattern_count.nav_countの数だけqueries.queryをランダムで抽出したい。
この際ランダムで抽出するqueryはなるべく重複しないものを出したい。

それでも一発ではうまく実行できないときもあるので、そんなときはエラー文言をそのままChatGPTにコピペして修正して……を繰り返してSQLを導き出すしかありません。繰り返しこなしていくとどういう情報を与えるべきなのかがなんとなくわかってきます。

これからも私はChatGPTとともにBigQueryへ立ち向かっていきたいと思います💪

おまけ

例1で出力した日別の気温データに土日祝日の判定するカラムを追加しようと思いました。日本の祝日は年ごとに変わるなど複雑なのでそのあたりChatGPTがうまいことやってくれないかな?という期待を込めてみたものの望む結果は得られませんでした。

うまいことやってくれなかったChatGPT

 

だめか~と思っていたら大井GPTが現れて解決方法を提示してくれました。

ときどき人間GPT(?)が現れ解決策を提示してくれることもあるのがJADE内のオープンな場でChatGPTを使っていて良いところだな~と思います。

明日以降のアドベントカレンダーもお楽しみに!