MySQL HeatWaveは、トランザクション、分析、機械学習、生成AIサービスを組み合わせた唯一のフルマネージドのMySQLデータベース・サービスです。また、MySQL HeatWave Lakehouseも含まれており、ユーザーはオブジェクト・ストレージ、MySQLデータベース、またはその両方の組合せに格納されているデータを分析できます。ユーザーは、MySQL HeatWaveを利用したアプリケーションを、Oracle Cloud Infrastructure(OCI)、Amazon Web Services(AWS)およびMicrosoft Azureのいずれかのパブリック・クラウドにデプロイできます。

OCI, AWSおよびAzure上のMySQL HeatWave バージョン9.4.1にて、新しいNatural Language to SQL (NL2SQL)機能がリリースされました。

この革新的な機能により、ユーザーは自然言語での問い合わせをSQL文に簡単に変換し、データ分析を簡素化し、インサイトを加速できます。

NL2SQLを使用すると、技術ユーザーと非技術ユーザーの両方がMySQL HeatWaveデータベースとより直感的に対話できるため、生産性が向上し、データからより大きな価値を引き出すことができます。

機能の概要

大規模言語モデル(LLM)は、NL2SQL機能の中心にあり、自然言語での問い合わせをSQLに変換できます。ただし、LLMのみを利用しても、特に多数の表および列を含む複雑なデータベースを使用する場合、正確で関連性の高いSQL文を確保するには不十分です。

これに対処するために、オラクルのソリューションは、自然言語での問い合わせごとに、表名、列名、それらの関係など、関連するデータベース・スキーマ・メタデータを自動的に収集します。

このメタデータは、追加のテキスト・コンテキストとして処理され、LLMプロンプトにシームレスに組み込まれます。スコープをスキーマの関連する部分のみに絞り込むことで、モデルではユーザーの意図をより正確に解釈し、データベースの構造に合せたSQL文を生成できます。

MySQL HeatWaveがサポートする NL2SQLの昨日

このプロセスは、ユーザーが自然言語の質問を送信すると開始されます。質問に最も関連するスキーマ要素のみが選択および要約されます。拡張プロンプト(Augmented Prompt)と呼ばれます。

ユーザーの質問とスキーマの詳細の両方を含むこのプロンプトがLLMに渡されます。

LLMがSQL文を生成すると、システムは出力を解析し、そのSQL構文を検証する自己反射(Self-Reflection)を実施します。これは、潜在的な不整合やエラーを捕捉するための追加のレビュー・ステップです。

これらの検証ステージを通過した後にのみ、データベースに対して実行されるSQL文で、ユーザーの元の質問に正確に回答する結果セットを取得します。

このマルチレイヤ・アプローチにより、使いやすさと信頼性の両方が保証され、すべてのユーザーにとって直感的で効率的なデータ探索が可能になります。

MySQL HeatWaveでのNL2SQLの使用

NL2SQL機能は、ストアド・プロシージャを使用してアクセスします。

CALL sys.NL_SQL("What is the total number of bookings priced over $200?", @output, NULL);
+---------------------------------------------------------------------------+
| Executing generated SQL statement... |
+---------------------------------------------------------------------------+
| SELECT COUNT(`booking_id`) FROM `airportdb`.`booking` WHERE `price` > 200 |
+---------------------------------------------------------------------------+

+---------------------+
| COUNT(`booking_id`) |
+---------------------+
| 32699080 |
+---------------------+

これにより、関連するすべてのデータベースのオブジェクトが自動的に識別され、生成されたSQL文が実行されます。
データベースやスキーマのメタデータ収集を単一のデータベースに制限するには、schemas パラメータを使用します。

CALL sys.NL_SQL("What is the total number of bookings priced over $200?", @output, '{"schemas":["airportdb"]}');
+---------------------------------------------------------------------------+
| Executing generated SQL statement... |
+---------------------------------------------------------------------------+
| SELECT COUNT(`booking_id`) FROM `airportdb`.`booking` WHERE `price` > 200 |
+---------------------------------------------------------------------------+

+---------------------+
| COUNT(`booking_id`) |
+---------------------+
| 32699080 |
+---------------------+

executefalse に設定することで、実行を無効にすることもできます。

CALL sys.NL_SQL("What is the total number of bookings priced over $200?", @output, '{"execute": false}');

この方法でストアド・プロシージャをコールすると、出力は生成されません。生成されたSQL文と追加情報はユーザ変数の @output に格納されています。 

SELECT JSON_PRETTY(@output);
{
"tables": [
"airportdb.booking",
"airportdb.airplane_type",
"airportdb.passengerdetails",
"airportdb.airplane",
"airportdb.flightschedule",
"airportdb.passenger",
"airportdb.airport_reachable",
"airportdb.airline",
"airportdb.airport_geo",
"airportdb.employee",
"airportdb.flight",
"airportdb.airport",
"airportdb.flight_log"
],
"schemas": [
"airportdb"
],
"model_id": "meta.llama-3.3-70b-instruct",
"sql_query": "SELECT COUNT(`booking_id`) FROM `airportdb`.`booking` WHERE `price` > 200",
"is_sql_valid": 1
}

このJSONオブジェクトは、メタデータ収集に使用されるスキーマと表、SQL文の生成に使用される大規模言語モデル、生成されたSQL文、およびSQL文が構文的に有効かどうかを示します。

また、`model_id` パラメータを使用してSQL文を生成するために、別の大規模言語モデルを使用することもできます。使用可能な大規模言語モデルのリストについては、ドキュメントを参照してください。

CALL sys.NL_SQL("What is the total number of bookings priced over $200?", @output, '{"model_id": "llama3.1-8b-instruct-v1"}');
+----------------------------------------------------------------+
| Executing generated SQL statement... |
+----------------------------------------------------------------+
| SELECT COUNT(*) FROM `airportdb`.`booking` WHERE `price` > 200 |
+----------------------------------------------------------------+

+----------+
| COUNT(*) |
+----------+
| 32699080 |
+----------+

ベスト・プラクティスと制限事項

NL_SQL機能の使用時に最適な結果を得るには、次のベスト・プラクティスに従うことを検討してください。まず、ストアド・プロシージャのschemaおよびtableパラメータを使用して関連するスキーマまたは表を指定することで、メタデータ収集の対象を制限します。これにより、LLMはより正確なSQL文を生成できます。次に、表、列およびビューに意味のある名前があることを確認します。これにより、LLMはデータベースの構造とコンテキストをより深く理解できます。複雑なJOIN操作を使用すると、問合せ生成の精度を向上するため、名称など説明的なビューを作成して使用することも検討します。さらに、自然言語入力内の正確な値を指定して、リテラル・フィルタに関連するエラーを最小限に抑えます。

NL_SQL機能は強力な自然言語問合せ機能を提供しますが、考慮すべき重要な制限事項がいくつかあります。生成されたSQL問合せは必ずしも完全ではない場合があり、問合せの複雑さによっては、その実行時間が予測できない場合があります。場合によっては、クエリーによって大きな結果セットが生成され、過剰なリソース消費などの意図しない副作用が発生する可能性があります。この機能では、以前の問い合わせや応答の状態は保持されません。つまり、各呼出しは独立して動作し、以前のレスポンスを利用しません。さらに、データベースに大量のメタデータ・コンテキストが含まれている場合は精度が低下する可能性があります。これは、迅速な構築と解釈が複雑になる可能性があるためです。最後に、一時表はサポートされておらず、tableパラメータで指定できないことに注意してください。

まとめ

MySQL HeatWaveの新しいNL2SQL機能により、ユーザーは高度な大規模言語モデルを使用して自然言語の質問を正確なSQL文にシームレスに変換でき、状況に応じた正確さを実現できます。

カスタマイズのための柔軟なオプション、精度を最大化するためのベストプラクティス、および制限に関する明確なガイダンスにより、NL2SQLは、ユーザーが機能をニーズに合わせて調整できるようにしながら、データ探索をより直感的に行います。

この機能により、インサイトへのアクセスが合理化され、複雑なデータベースのパワーが解放され、MySQL HeatWave内の多様な分析ワークフローがサポートされます。

追加情報

NL2SQL機能の リファレンス・マニュアル

OCIのAlways Free ServicesでMySQL HeatWaveを無料で利用する.

MySQL HeatWaveをはじめてみる (チュートリアル).

MySQL YouTube チャンネル