保存版?!生成AIにSQL文を書いてもらうときのコツ

保存版?!生成AIにSQL文を書いてもらうときのコツ

GA4がBigQueryにエクスポートするテーブルを対象に特定の集計を行いたいが、自分ではSQLを書けない場合、これまでは、社内のできる人に依頼するという選択肢一択でした。しかし、生成AIの利用が一般的になりつつある今、「生成AIにSQL文を書いてもらう」という選択肢を持てるようになっています。

人間に依頼する場合、社内の身近にお願いできる人がいない、あるいは、いるにはいるけれど、依頼するのははばかられるという状況も大いに有り得ると思います。ですので、今後、生成AIにお願いすることになる人も多いかと思います。

そこでこの記事では、生成AIに適切なSQL文を書いて貰うときのコツをまとめてみます。生成AIにSQL文を書いてもらうためのプロンプト入門ともいえます。かなりの確率でOKなSQL文を入手できるとは思いますが、このプロンプトで絶対に適切なSQL文を記述してもらえるという保証はしておりませんので、その点はご理解と自己責任でお願いします。

まずAIエンジン(LLM)として候補になるのは、以下の3つだと思います。

  1. Microsoft Copilot
  2. OpenAI ChatGPT
  3. Google Gemini

MicrosoftはOpenAIに100億ドル以上投資しているとのことですので、1と2はOpenAI系として、同じグループと考えて良いかもしれません。そして、そのOpenAI系の方が、SQL文を書くという能力においては、今のところ、Google Geminiより断然優れていますので、Copilotか、ChatGPTを利用することを推奨します。

この記事では、ChatGPTを使う前提で進めますが、Copilotでも「コツ」は全く同じです。

ChatGPTにSQL文を書いて貰うためのプロンプトの例

以下が、そのコツを満載した完成版のテキスト(プロンプト)です。このプロンプトを例にコツを抽出してお届けします。

 

以下が、ChatGPTが書いてくれたSQL文です。このSQL文を、一文字も手直しせず、BigQueryのクエリエディタに投入することで、知りたかった「日別、ページタイトル別のページビュー数」を取得することができます。バージョンについては、以下はChatGPT4に書いてもらったものですが、3.5でも正確なSQL文を書いてもらうことができました。ただし、SQL文の説明については、4の方が親切です。

 

ChatGPT4の説明文はこんな感じです。

 

ChatGPTにSQL文を書いて貰うためのコツ

コツは、以下の7つにまとめることができます。どれも基本的なことなのですが、一つづつ解説してみましょう。

  1. BigQueryで利用するSQLだということを明示する
  2. できるだけWITH句を使うことを依頼する
  3. 対象のテーブルをフルパスで含める
  4. 期間を _TABLE_SUFFIX関数を利用して指定する
  5. 出力を「●●別の▲▲数」という形で指定する
  6. 結果テーブルのソート順を指示する
  7. 結果テーブルのインプット・アウトプットの詳細を指定する

 

コツ1: BigQueryで利用することの明示(プロンプトの行1)

このコツは簡単に理解していただけると思います。SQL文はおおよそどのデータベースに対しても共通する流儀「標準SQL」がありますが、それでも細かな関数などには違いがある可能性があります。ChatGPTは、依頼されたSQL文がどのデータベースで利用されるかわからないため、教えてあげて、BigQuery準拠のSQL文を書いてもらえる確率を高めます。

 

コツ2:できるだけWITH句を使う(プロンプトの行2)

SQLを全く書けない訳でもない。という場合には、書いてもらったSQLを検証することになるかと思います。そのときにWITH句を使ってあるSQL文の方が検証が楽です。WITH句とは仮想のテーブルを作成するコマンドで、本体のSQLはその仮想テーブルに対して実行するという建付けでのSQL文になります。

ちょっと乱暴に(=端折って)言うと、データの整形をWITH句で行って仮想のテーブルを作成し、その仮想テーブルに対して、本体のSQL文で結果テーブルを出力する。という構造にできる。ということです。

例えば、以下のSQL文は全く同じことをしていますが、左はサブクエリ(=SELECT~FROMが入れ子になったSQL文)を使っているので少し理解しづらく、整形部分をWITH句で分離している右側の方が解釈しやすいですね。

 

コツ3:対象のテーブルをフルパスで記述する(プロンプトの行3)

ChatGPTはSQL文が発行される先のテーブルを知りません。そこで、フルパスで対象のテーブルを教えてあげる必要があります。この部分をおろそかにしないでちゃんと記述しておくと、ChatGPTが記述してくれたSQL文をそのままBigQueryのクエリエディタの投入して実行できるようになります。

ちなみに、フルパス。と言っているのは、プロジェクト名・ドット・データセット名・ドット・テーブル名 のことです。GA4がBigQueryにエクスポートしたテーブルを対象とする場合には、 events_* と記述しておいて、期間は別に指定すると良いでしょう(コツ4参照)

 

コツ4:期間を _TABLE_SUFFIX関数で指定する(プロンプトの行4)

GA4がBigQueryにエクスポートしたテーブルは日次で分かれています。複数日を指定する最も合理的な方法は、_TABLE_SUFFIX関数を利用することです。ChatGPTはテーブルが日次で分かれていること、_TABLE_SUFFIX関数を使うのが合理的なことを知らないので、その点をおしえてあげます。

 

コツ5:「●●別の▲▲数」という形で指定する(プロンプトの行5)

集計したい内容を、「●●別の▲▲数」という形で指示します。「●●」が、ディメンションとして利用したいカラム、「▲▲」指標として利用したいカラムになります。多分、ChatGPT的には、SQL文の構造を模して、「●●カラムと■■カラムでグループ化した▲▲数」と言ってあげたほうがより分かりやすいのかな?という気がしますが、「●●別、■■別の▲▲数」という指示でも、ChatGPTは全く問題ないSQL文を出力してくれます。

 

コツ6:結果テーブルのソート順の指定(プロンプトの行6)

SQL文が出力した結果テーブルをBIツールで利用する場合には、ソート順の指定は不要(=BIツール側でソートするのでSQL文での出力時に指定する必要はない)ですが、BigQueryのコンソール上でSQL文を実行し、結果テーブルを目検したい場合、ソートされていた方が確認しやすいです。

昇順とは小さい順、降順とは大きい順です。昇順は ASC、降順は DESCというキーワードで指定します。ASCがデフォルトなので省略可能です。

 

コツ7:結果テーブルの詳細指定(プロンプトの行7、8、9)

コツ1から6までで、ChatGPTに「結果テーブルの概要」についての指示を与え終わりました。コツ7では、結果テーブルとして出力するカラム(=列)の詳細を指定します。具体的には以下の3項目です。

 

  1. 元テーブルのどのカラムから取得するのか
  2. 取得元のカラムのデータ型と取得方法
  3. 出力するカラムの名前とデータ型 

 

A.元テーブルのどのカラムから取得するのか?

例えば、結果テーブルに「日付」を出力したい場合でも、元データにある利用可能なカラムとしては、event_date(時差調整済)と、event_timestamp(時差未調整、UNIX時のマイクロ秒表記)があります。どちらを使うのか指定してあげる必要があります。

 

B.取得元のカラムのデータ型と取得方法

ChatGPTは、BigQueryで利用可能な関数を含むSQL文を記述してくれる訳ですが、関数というのは、元データの「データ型」によって使えたり、使えなかったりします。そのため、ChatGPTが適切な関数を含んだSQL文を記述してくるよう、データ取得元のカラムのデータ側を教えてあげる必要があります。

また、GA4がエクスポートするテーブルのように、カラムがネストされている場合には、それも教えてあげたほうが良いでしょう。サンプルのプロンプトでは、8行目の、page_titleを取得しているところが該当します。もし、このあたりがうまく理解できない場合には、サンプルプロンプトをコピーして、必要に応じて修正して使ってください。

 

C.出力するカラムの名前とデータ型

結果テーブルに含めてほしいカラムの名前とデータ型を指定します。この指定をするだけで、BIツール側での型変換やカラム名の変更といったひと手間を減らせるので、やっておいたほうが良いと思います。

 

まとめ

如何でしたか?SQL文が(あまり)得意ではなくても、必要なSQL文を取得できる(かもしれない)ということはなんとなく理解できたのではないでしょうか?

また、きっとお気づきと思いますが、仮にSQL文が記述できないとしても、対象となるテーブル(この場合は、GA4がBigQueryにエクスポートするテーブル)の構造と、各カラムに含まれている値の内容は分かっていないと、そもそも、プロンプトを記述できない。ということですね。「元データの構造と値の理解」は、実は、人間にSQL文を記述してくれるように依頼する場合でも、必ず必要になります。

SQL文は必要だけど、書けないという場合には、ですので、GA4がBigQueryにエクスポートしたテーブルの構造と各カラムが保持する値についてだけでも理解しておく必要があります。

 

宣伝

ここからは宣伝です。3月末に、Udemyに新講座を公開しました。「BIツールで100種類以上のレポートを作成できるWebサイト分析用のたった5個のSQL文」という講座です。この講座では、SQL文を上手に書けない人に対して、a.人にお願いする、b.生成AIにお願いするに次ぐ、第三の選択肢、c.汎用的に記述されたSQL文を利用するを提供します。

講座を購入していただくとGA4がBigQueryにエクスポートした5つのSQL文が手に入ります。それだけでなく、そのSQL文には非常に詳しい解説がついていますので、自分で改造することも比較的容易です。第三の選択肢を得たいという方は是非、ご利用ください。

 

いやいや、わたしは僕は、ちゃんとSQLを勉強して、身につけたいよ。という方にたいしては、学習用の良い動画講座があるんですよ。たくさんのレビューを頂き、5点満点中4.6点と、お陰様で評判も良いようです。よろしければどうぞ。(画像をクリックするとUdemy.comにジャンプします。)

 

え?SQLは本で勉強したい?なるほど、では、こちらをどうぞ。