mabl では、データベースクエリステップを使って、接続済みデータベース内のデータを作成、読み取り、更新、削除できます。データベースクエリーを書く前に、あなたやチームのメンバーがクエリー対象のデータベースのスキーマを理解し、安全にクエリーを作成できることを確認してください。この記事では、mabl でデータベースクエリーを書く際の機能と制限について説明します。
クエリー編集者
mablでクエリーが実行されるときは、クエリー編集者、Trainerの再生、ローカル実行やクラウド実行のいずれの場合でも、接続されているデータベースにリアルタイムでアクセスします。データの作成、削除、または更新を行う際は注意してください。
SQLクエリー
SQLデータベースを操作する際は、クエリーがデータベース固有のSQL構文に従っていることを確認してください。たとえば、直近10分間に作成されたレコードをtest_usersテーブルから取得するクエリーは、MySQLとOracleで異なります。
MySQL では、クエリーは NOW() 関数とシンプルな INTERVAL 構文を使用します。
SELECT * FROM test_users WHERE created_at > NOW() - INTERVAL 10 MINUTE;Oracle では、同じクエリーで SYSDATE 関数を使用し、INTERVAL の値にはシングルクォートが必要です。
SELECT * FROM test_users WHERE created_at > SYSDATE - INTERVAL '10' MINUTE;構文や規則の詳細については、ご利用のデータベースの公式ドキュメントをご参照ください。
NoSQLクエリー
多くのNoSQLシェルでは、db.todo.find( { completed: false }, { "dueDate" : 1 } ) のように、1つの完全なコマンドを入力する必要があります。しかし、mablクエリー編集者では、コマンドの各要素を分解し、「メソッド」、「コレクション」、「フィルター」、「オプション」といった個別のフィールドに入力する必要があります。
NoSQLクエリーを記述する際にdb.collection()の表記に慣れている場合は、次の表でその1行コマンドをどのように分解し、mablクエリー編集者に入力するかを説明しています。
| 標準コマンドコンポーネント | mablクエリー編集者フィールド | 入力 |
|---|---|---|
db.todo |
コレクション | todo |
.find() |
ヘッダー | find |
{"completed":false} |
フィルター | { "completed": false } |
{"dueDate":1} |
オプション | { "dueDate": 1 } |
生成AI DBクエリー生成ツール
独自のクエリーを作成するだけでなく、自然言語のプロンプトからクエリーを生成することもできます。他の生成系AIツールと同様に、クエリー生成機能は適切なコンテキストがあると最も効果的に動作します。次の要素が結果に影響することを覚えておいてください。
- テーブルメタデータ:データベース接続のクレデンシャルに、テーブル名、カラム名、カラム型などのメタデータへアクセスする権限が含まれていることを確認してください。
- データベースの命名規則:クエリー生成AIは、データのビジネス上の背景を把握していません。テーブル名やカラム名の命名規則が自然言語で理解しやすいものでない場合は、プロンプトにより詳しい説明を追加してください。
最適な結果を得るには、プロンプトでデータセットに含めたいデータの内容、どのようなデータをまとめるべきか、除外すべきものがあるかを具体的に記載してください。プロンプトには明示的なSQL構文を含めることもできますが、必要な情報が含まれていれば、モデルは自然言語のプロンプトでも十分に対応できます。例えば、次のようになります。
「動物病院での動物の来院情報を探しています。すべてのペットの名前と、その所有者の名前、住所、電話番号、さらに最後に来院した日時と、過去1年間の来院回数を一意のリストで見たいです。リストは、来院回数が多い順、次に最も最近の来院日が新しい順に並べてください。」
生成AIの機能と同様に、結果は完全に予測できるものではなく、エラーが発生する場合があります。テストに組み込む前に、必ず結果を確認してください。
クエリパラメータ
パラメータを使うと、クエリーをさまざまな状況で再利用しやすくなります。mablのテストで既存の変数をパラメータ値として追加するには、mabl変数構文を使ってください。たとえば、test_varという名前の変数は、クエリー編集者のパラメータ欄で{{@test_var}}のように記述します。
クエリー内では、ほとんどのデータベースタイプでパラメータを参照する際に:paramNameという形式を使います。開発者がよく知っている特定の形式があるデータベースタイプの場合、クエリー編集者はそのドライバー固有の形式にも対応しています。たとえば、Microsoft SQLではパラメータに@paramName形式を使用します。
保存オプション
保存ボタンの横にある下向き矢印をクリックすると、すべての保存オプションが表示されます。
1 回限りのクエリーとして保存
クエリーを再利用する予定がない場合は、このオプションを選択してください。後で気が変わった場合でも、「新しい再利用可能クエリーとして保存」をクリックすれば、ワンタイムクエリーを再利用可能なクエリーに変換できます。ワンタイムクエリーも他のテストステップと同様にバージョン管理されますが、テスト > クエリーページからは利用できません。
クエリーとブランチ
再利用可能なクエリーはブランチには対応していません。再利用可能なクエリーに加えた変更は、そのクエリーを使用しているすべての箇所に同期されます。クエリーをブランチで管理したい場合は、クエリーを一度限りのクエリーとして保存し、ブランチ化した再利用可能なフローに追加してください。
新しい再利用可能なクエリーとして保存
このオプションを選択すると、新しいクエリーを作成し、複数のテストで再利用できます。このオプションは、mablトレーナーで作成したクエリーにのみ利用できます。テスト > クエリーページの既存のクエリーから新しいクエリーを作成することはできません。
保存
既存のクエリーの変更を更新します。再利用可能なクエリーの場合、変更を保存すると、そのクエリーを使用しているすべてのテストに反映されます。
クエリーを保存した後、mablトレーナーのデータベースクエリーステップでアサーションを追加したり、変数を作成したりできます。これらのアサーションや変数は、特定のテストステップに紐づいています。再利用可能なクエリーに対しては、直接クエリーページ(テスト > クエリー)からアサーションや変数を設定できません。
これらの操作は、クエリーをmablトレーナーでテストのステップとして追加した場合にのみ可能です。
制限事項
クエリー編集者には、以下の既知の制限があります。これらの制限がご利用のケースで課題となる場合は、mabl Product Portalでフィードバックをお寄せください。
サイズの制限
クエリー結果は100行または1MBを超えることはできません。これらのサイズ制限を超えるクエリーを返さないように、必要な行や列だけを取得するよう、より正確なクエリーを書くことを検討してください。このような精度の高いクエリーは、テストを構築する際のベストプラクティスとして一般的に推奨されています。あるいは、すべての情報が必要な場合は、複数のデータベースクエリーステップを作成してください。
サポートされていないカラムタイプ
ほとんどのデータベース列タイプはサポートされていますが、クエリー編集者では、JSONやBufferタイプなど一部の特殊な列タイプはサポートされていません。
複数のテーブルからクエリーする
複数のテーブルから結果を返すクエリーはサポートされていません。例えば、次のような場合です。
SELECT * FROM TABLE1; SELECT * FROM TABLE2;該当する場合は、代わりにJOINまたはUNIONを使ってクエリーを書いてください。