Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SelectAIでSQL研修の演習問題に挑む [Oracle]

SelectAIでSQL研修の演習問題に挑む [Oracle]

2024年6月21日 【JPOUG Teck Talk Night #9】

Oracle Autonomous Databaseでは自然言語からSelect文を生成するSelectAIが使用可能です。
SelectAIの概要や生成されるSelect文の精度UPさせるコツを紹介します。
題材として、SQL入門研修の演習問題にどれだけ自然言語だけで回答を導き出せるかチャレンジしてみます。

Takayuki Nishio

June 21, 2024
Tweet

More Decks by Takayuki Nishio

Other Decks in Education

Transcript

  1. Oracle Cloud 失注への軌跡 ~ 努力は無駄にならない ~ しゃちほこオラクル倶楽部 第7回 西尾 孝之

    SelectAIでSQL研修の演習問題に挑む 2024年6月21日 【JPOUG Teck Talk Night #9】 - Takayuki Nishio -
  2. オーガナイザー紹介 | 西尾 孝之 / Takayuki Nishio 資格 ・ORACLE MASTER

    : Platinum DBA 2019, 12c , 11c , 10g , 9i , 8i ・AWS : Database Speciality , Data Analytics 認定証 ・マッターホルン登頂…4478m ・モンブラン登頂………4810m ・キリマンジャロ登頂…..5895m Oracleと山を愛するエンジニア(21年目)
  3. SelectAI概要 | コマンド例 Select AIが対応するコマンド <構文> select ai [option] 自然言語による問い合わせ

    runsql : SQL結果を返す(デフォルト) showsql : 生成されたSQL文を返す narrate : 会話形式の結果を返す chat : 一般的なAIチャット
  4. SQL演習問題にチャレンジ | サンプル表(HRスキーマ) EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY MANAGER_ID DEPARTMENT_ID -----------

    -------------------- --------- --------- ---------- ------------- 100 Steven 13-06-17 24000 90 101 Neena 15-09-21 17000 100 90 102 Lex 11-01-13 17000 100 90 103 Alexander 16-01-03 9000 102 60 104 Bruce 17-05-21 6000 103 60 105 David 15-06-25 4800 103 60 ~ DEPARTMENT_ID DEPARTMENT_NAME ------------- ------------------------------------------------------------ 10 管理部 20 マーケッティング部 30 Purchasing 40 人事部 50 開発部 ~ 使用するテーブル(HRスキーマ) EMPLOYEES(社員表) DEPARTMENTS(部門表)
  5. SQL演習問題にチャレンジ | どのぐらい対応できたか? SQL SELECT文を使用したデータの取得 データの制限とソート 単一行関数を使用した出力のカスタマイズ 変換関数と条件式の使用方法 グループ関数を使用した集計データのレポート 結合を使用した複数の表のデータの表示

    副問合せによる問合せの解決方法 集合演算子の使用 DML文を使用した表の管理 データ定義言語の概要 給料が4000以下社員一覧をだして 給料が4000より少ない社員一覧をだして 給料が4000から6000の社員を表示して 名前の先頭がAの社員を表示して 名前の文字数を数えて 名前を大文字で表示して; 社員名と入社日を表示して。入社日は年月を表示して; 社員名と入社日を表示して。入社日が2014年の社員を知りたい; 部門ごとに社員数をカウントして 部門ごとの給料の平均を知りたい 部門ごとの給料の平均を知りたい。部門名も表示して 部門ごとの給料の最大値を知りたい 部門ごとの給料の最大値を知りたい。部門名も表示して; 部門がファイナンスで給料が一番多い人を知りたい 部門表のデータを削除して 社員の一覧を表示して。 社員の名前と入社日を表示して 社員の名前と入社日を表示して。給料も 社員の名前と給料を教えて。給料のタイトルは給料($)にして; 社員の名前と入社日を表示して。社員の名前順に表示して; 社員の名前と入社日を表示して。給料の順に表示して; 社員の名前と入社日と給料を表示して。給料の多い順に表示して; 入社日が1999年以降の社員を教えて SQL研修の目次 SELECTAI 関数を条件に すると弱い? 以上以下はうまくいくが、 「より」が難しい 自然な形でも 受け取ってくれる! SelectAIなので DMLは無理!
  6. SQL演習問題にチャレンジ | 面白い対応をしたもの SQL> select ai 社長は誰?; EMPLOYEE_ID FIRST_NAME -----------

    ---------------------------------------- 100 Steven SQL> select ai showsql 社長は誰?; RESPONSE -------------------------------------------------------------------------------- SELECT EMPLOYEE_ID, FIRST_NAME FROM HR2.EMPLOYEES WHERE MANAGER_ID IS NULL SQL> select ai chat オラクルのCEOはだれ; RESPONSE -------------------------------------------------------------------------------- The CEO of Oracle is Safra A. Catz. Catz has served as a principal executive off ~ chatオプションはDBでは なく、外部問い合わせ MANAGER_ID(上司)が ない社員を検索してきた EMPLOYEE_ID FIRST_ ~ MANAGER_ID DEPART ----------- -------- ---------- ------ 100 Steven 101 Neena 100 SelectAIが面白い判断をしてきた問い合わせ
  7. SelectAIの精度UP | 追加情報の付与 表名や列名が一般的な英語の場合、ある程度意味をくみ取ってくれる。 では表名や列名が、意味をもっていかなったら? 社内用語を使いたかったら? AIといえばチューニング! 23ai新機能のSQLドメインやコメント機能を活用し、情報を付加 E1_C1 E1_C2

    E1_C3 E1_C4 E1_C5 E1_C6 ----------- -------------------- --------- --------- ---------- ------------- 100 Steven 13-06-17 24000 90 101 Neena 15-09-21 17000 100 90 102 Lex 11-01-13 17000 100 90 103 Alexander 16-01-03 9000 102 60 104 Bruce 17-05-21 6000 103 60 105 David 15-06-25 4800 103 60 ~ E1 COMMENT ON COLUMN E1.E1_C2 IS '従業員の氏名。名前'; COMMENT ON TABLE E1 IS '従業員テーブル。社員表';
  8. 参考情報 | BIRD-BENCH 自然言語によるクエリ生成をもっと知りたい人は? ※2024/6/15時点の情報を bird-bench.github.io から抜粋 BIRDには、12,751を超える一意の質問とSQLのペア、合計サイズ 33.4GBの95の大きなデータベースが含まれています。 また、ブロック

    チェーン、ホッケー、ヘルスケアなど、37以上の専門分野をカバーして います。 →同じデータベースに対して同じ質問をし モデルごとの回答精度を数値化するベンチマーク 人間が書くSQL GTP-4