DataGrip 2024.2 ヘルプ

AI Assistant を使用する

AI Assistant プラグインをインストールする

この機能は、インストールして有効にする必要がある AI Assistant(英語) プラグインに依存しています。

  1. Ctrl+Alt+S を押して設定を開き、プラグインを選択します。

  2. マーケットプレースタブを開き、AI Assistant プラグインを見つけて、インストールをクリックします (プロンプトが表示されたら、IDE を再起動します)。

AI Assistant は、ソフトウェア開発用の AI を活用した機能を提供します。AI Assistant の詳細については、AI Assistant トピックを参照してください。

このチュートリアルでは、次のタスクに AI Assistant を使用する方法を学習します。

データアグリゲータとエクストラクターを作成する

カスタムデータアグリゲータまたはエクストラクターが必要な場合は、AI Assistant にタスク用のものを作成するように依頼し、作成したスクリプトを aggregators または extractors ディレクトリに追加できます。

LLM に動作するスクリプトの例を提供すると、プロンプトと修正の回数が減る可能性があります。DataGrip では、バンドルされたスクリプトは Scratches and Consoles | Extensions | Database Tools and SQL | dataファイルツールウィンドウ (Alt+2) にあります。

アグリゲータとエクストラクターの詳細については、集計ビューおよびデータ抽出を参照してください。

このチュートリアルでは、アグリゲータを作成し、次の AVG.groovy アグリゲータを例として使用します。

/* * Available context bindings: * COLUMNS List<DataColumn> * ROWS Iterable<DataRow> * OUT { append() } * FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); } * TRANSPOSED Boolean * plus ALL_COLUMNS, TABLE, DIALECT * * where: * DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object } * DataColumn { columnNumber(), name() } */ import static java.math.MathContext.DECIMAL128 BigDecimal RES = 0 int i = 0 ROWS.each { row -> COLUMNS.each { column -> def value = row.value(column) if (value instanceof Number) { RES = RES.add(value, DECIMAL128) i++ } else if (value.toString().isBigDecimal()) { RES = RES.add(value.toString().toBigDecimal(), DECIMAL128) i++ } } } if (i > 0) { RES = RES.divide(i, DECIMAL128) OUT.append(RES.toString()) } else { OUT.append("Not enough values") }

DataGrip では、このスクリプトは Scratches and Consoles | Extensions | Database Tools and SQL | data | aggregatorsファイルツールウィンドウにあります。

ステップ 1. スクリプトをリクエストする

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. 入力フィールドにプロンプトを入力します。必要なスクリプトを説明し、動作するスクリプトの例を LLM に提供します。

  3. 生成されたスクリプトがあるフィールドの右上隅で、the Copy to Clipboard icon クリップボードにコピーをクリックしてコードをクリップボードにコピーします。

生成されたスクリプト:

/* * Available context bindings: * COLUMNS List<DataColumn> * ROWS Iterable<DataRow> * OUT { append() } * FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); } * TRANSPOSED Boolean * plus ALL_COLUMNS, TABLE, DIALECT * * where: * DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object } * DataColumn { columnNumber(), name() } */ import java.util.* import java.util.stream.Collectors // Create a map to store string values and their frequencies Map<String, Integer> freqs = new HashMap<>() ROWS.each { row -> COLUMNS.each { column -> def value = row.value(column) if (value instanceof String) { freqs.put(value, freqs.containsKey(value) ? freqs.get(value) + 1 : 1) } } } // Find max frequency int maxFreq = Collections.max(freqs.values()) // Collect most frequent strings List<String> mostFrequent = freqs.entrySet().stream() .filter(e -> e.getValue() == maxFreq) .map(Map.Entry::getKey) .collect(Collectors.toList()) if (mostFrequent.size() > 0) { OUT.append(String.join(", ", mostFrequent)) } else { OUT.append("No string values found") }
Data aggregator and extractor script creation

ステップ 2. スクリプトをファイルとして保存する

  1. 次のいずれかの方法でファイルツールウィンドウを開くことができます。

    • メインメニューで、表示 | ツールウィンドウ | ファイルに移動します。

    • ツールウィンドウバーで、Files tool window icon ファイルをクリックします。

    • Alt+2 を押します。

  2. Scratches and Consoles | Extensions | Database Tools and SQL | data | aggregators に移動します。

  3. アグリゲータノードを右クリックし、新規 | ファイルを選択します。

  4. 新規ファイルポップアップで、新しいファイル名を入力します。例:

    most_frequent_values.groovy

  5. 新しいデータアグリゲータスクリプトをファイルに貼り付けます。

    (オプション) 貼り付けたコードを変換するダイアログが表示されたら、キャンセルを押します。このチュートリアルでは、生成されたスクリプト自体を保存します。

新しいデータアグリゲータがデータエディターのステータスバーのアグリゲータリストに表示され、データで使用できるようになります。

Paste the created script to a new file

自然言語を使用してクエリと情報をリクエストする

AI Assistant はスキーマに関するインサイトを提供し、自然言語のリクエストに基づいてスキーマの SQL クエリを生成することもできます。スキーマにアクセスして構造を分析し、要求されたクエリまたは情報を提供します。

説明のために、ai_demo データベースにインポートされた PostgreSQL Sakila スキーマを使用します。ダンプファイルは、dumps リポジトリをクローンすることで取得できます。

git clone https://github.com/DataGrip/dumps.git

リポジトリのクローン作成の詳細については、Git リポジトリのセットアップを参照してください。DataGrip でのダンプファイルの実行の詳細については、SQL ダンプファイルをインポートするを参照してください。

ステップ 1. スキーマを添付する

LLM にデータベーススキーマへのアクセスを許可するには、AI Assistant ツールウィンドウでスキーマをチャットにアタッチします。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. AI Assistant ツールウィンドウで、入力フィールドの上にある the Schema icon スキーマを添付をクリックし、アタッチするスキーマを選択します。この例では、ai_demo.public です。

  3. スキーマを添付ダイアログが表示されたら、接続をクリックしてスキーマを添付します。

チャットにスキーマを添付する方法の詳細については、スキーマセレクタを使用してスキーマを添付するを参照してください。

Attach the ai_demo.public schema to AI Assistant chat

ステップ 2. チャットで質問する

  • AI Assistant に特定のクエリを生成したり、スキーマに関する特定の情報を提供するように依頼します。次の例を検討してください。

    1. クエリを生成するためのリクエスト。

      Query generation based on a natural language request
    2. スキーマに関するインサイトをリクエストします。

      Schema insights based on a natural language request
    3. 検索を実行するよう要求します。

      Search request using a natural language

計画の表示を使用してスキーマとクエリを最適化する

AI Assistant は、EXPLAIN PLAN コマンドを使用してスキーマとクエリの最適化を支援します。スキーマにアクセスして、プランを分析し、最適化を提案できます。

説明のために、ai_demo データベースにインポートされた PostgreSQL Sakila スキーマを使用します。ダンプファイルは、dumps リポジトリをクローンすることで取得できます。

git clone https://github.com/DataGrip/dumps.git

リポジトリのクローン作成の詳細については、Git リポジトリのセットアップを参照してください。DataGrip でのダンプファイルの実行の詳細については、SQL ダンプファイルをインポートするを参照してください。

このチュートリアルでは、次のクエリを使用します。

SELECT customer.first_name, customer.last_name, category.name FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id INNER JOIN film_category ON inventory.film_id = film_category.film_id INNER JOIN category ON film_category.category_id = category.category_id WHERE category.name = 'Comedy';

ステップ 1. 計画の表示コマンドを実行する

AI Assistant に分析させたい EXPLAIN PLAN を入手してコピーします。

  1. クエリコンソールで、クエリを右クリックし、計画の表示 | 計画の表示 (生) に移動します。

  2. 結果タブで、Ctrl+ACtrl+C を押して結果をクリップボードにコピーします。

計画の表示コマンドの詳細については、クエリ実行計画を参照してください。

元のクエリの EXPLAIN PLAN :

Hash Join (cost=141.42..159.52 rows=86 width=81) Hash Cond: (customer.customer_id = rental.customer_id) -> Seq Scan on customer (cost=0.00..14.99 rows=599 width=17) -> Hash (cost=140.35..140.35 rows=86 width=70) -> Nested Loop (cost=38.41..140.35 rows=86 width=70) -> Hash Join (cost=38.12..126.34 rows=24 width=72) Hash Cond: (inventory.film_id = film_category.film_id) -> Seq Scan on inventory (cost=0.00..70.81 rows=4581 width=6) -> Hash (cost=38.06..38.06 rows=5 width=70) -> Hash Join (cost=19.43..38.06 rows=5 width=70) Hash Cond: (film_category.category_id = category.category_id) -> Seq Scan on film_category (cost=0.00..16.00 rows=1000 width=4) -> Hash (cost=19.38..19.38 rows=4 width=72) -> Seq Scan on category (cost=0.00..19.38 rows=4 width=72) Filter: ((name)::text = 'Comedy'::text) -> Index Scan using idx_fk_inventory_id on rental (cost=0.29..0.54 rows=4 width=6) Index Cond: (inventory_id = inventory.inventory_id)
EXPLAIN PLAN for the original query

ステップ 2. スキーマを添付する

LLM にデータベーススキーマへのアクセスを許可するには、AI Assistant ツールウィンドウでスキーマをチャットにアタッチします。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. AI Assistant ツールウィンドウで、入力フィールドの上にある the Schema icon スキーマを添付をクリックし、アタッチするスキーマを選択します。この例では、ai_demo.public です。

  3. スキーマを添付ダイアログが表示されたら、接続をクリックしてスキーマを添付します。

チャットにスキーマを添付する方法の詳細については、スキーマセレクタを使用してスキーマを添付するを参照してください。

Attach the ai_demo.public schema to AI Assistant chat

ステップ 3. 最適化の提案とコマンドを要求する

AI Assistant にクエリの EXPLAIN PLAN を分析し、可能な最適化を提案するよう依頼します。

  1. 入力フィールドにプロンプトを入力し、Ctrl+V を押して EXPLAIN PLAN を貼り付け、Enter を押します。

    Query optimization prompt and suggestions
  2. 提案された最適化に必要なコマンドを要求する別のプロンプトを入力し、Enter を押します。

    Commands for the suggested optimizations

ステップ 4. 提案されたインデックスの作成コマンドを実行する

  • コマンドを選択し、ツールバーの the Execute icon 実行をクリックするか、Ctrl+Enter を押して実行します。

推奨されるコマンド:

CREATE INDEX idx_customer_customer_id ON customer(customer_id); CREATE INDEX idx_rental_customer_id ON rental(customer_id); CREATE INDEX idx_rental_inventory_id ON rental(inventory_id); CREATE INDEX idx_inventory_inventory_id ON inventory(inventory_id); CREATE INDEX idx_inventory_film_id ON inventory(film_id); CREATE INDEX idx_film_category_film_id ON film_category(film_id); CREATE INDEX idx_film_category_category_id ON film_category(category_id); CREATE INDEX idx_category_category_id ON category(category_id); CREATE INDEX idx_category_name ON category(name);

IDE は定義されたデータベースオブジェクトを作成し、サービスツールウィンドウの出力タブで出力を表示できます。

Execution of the commands for the suggested optimizations

ステップ 5. 最適化されたスキーマとクエリの計画の表示を実行する

  • 生成された CREATE INDEX コマンドを含むフィールドの右上隅で、the Insert Snippet at Caret icon スニペットをキャレットに挿入をクリックして、クエリコンソールにコードを挿入します。

    提案された最適化されたクエリ:

    SELECT customer.first_name, customer.last_name, comedic_category.name FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id INNER JOIN film_category ON inventory.film_id = film_category.film_id INNER JOIN ( SELECT * FROM category WHERE category.name = 'Comedy' ) AS comedic_category ON film_category.category_id = comedic_category.category_id;

    最適化されたクエリの EXPLAIN PLAN :

    Hash Join (cost=27.80..236.36 rows=1003 width=81) Hash Cond: (rental.customer_id = customer.customer_id) -> Nested Loop (cost=5.32..211.23 rows=1003 width=70) -> Nested Loop (cost=5.04..49.31 rows=286 width=72) -> Nested Loop (cost=4.76..13.35 rows=62 width=70) -> Seq Scan on category (cost=0.00..1.20 rows=1 width=72) Filter: ((name)::text = 'Comedy'::text) -> Bitmap Heap Scan on film_category (cost=4.76..11.53 rows=62 width=4) Recheck Cond: (category_id = category.category_id) -> Bitmap Index Scan on idx_film_category_category_id (cost=0.00..4.74 rows=62 width=0) Index Cond: (category_id = category.category_id) -> Index Scan using idx_inventory_film_id on inventory (cost=0.28..0.53 rows=5 width=6) Index Cond: (film_id = film_category.film_id) -> Index Scan using idx_rental_inventory_id on rental (cost=0.29..0.53 rows=4 width=6) Index Cond: (inventory_id = inventory.inventory_id) -> Hash (cost=14.99..14.99 rows=599 width=17) -> Seq Scan on customer (cost=0.00..14.99 rows=599 width=17)
EXPLAIN PLAN for the original query

2 つのデータベースオブジェクトの DDL を比較する

データベーススキーマへのアクセスが提供されると、AI Assistant はそれを分析し、データベースオブジェクトの DDL を比較できます。

testing.public スキーマの actor テーブルと actor_test テーブルを比較してみましょう。

The actor and actor_test tables in Database Explorer

ステップ 1. スキーマを添付する

LLM にデータベーススキーマへのアクセスを許可するには、AI Assistant ツールウィンドウでスキーマをチャットにアタッチします。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. AI Assistant ツールウィンドウで、入力フィールドの上にある the Schema icon スキーマを添付をクリックし、アタッチするスキーマを選択します。この例では、ai_demo.public です。

  3. スキーマを添付ダイアログが表示されたら、接続をクリックしてスキーマを添付します。

チャットにスキーマを添付する方法の詳細については、スキーマセレクタを使用してスキーマを添付するを参照してください。

Attach the testing.public schema to AI Assistant chat

ステップ 2. テーブルの DDL を比較する

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. 入力フィールドにプロンプトを入力し、Enter を押します。

    AI Assistant が DDL を比較し、その違いを説明します。

Comparison of DLL of two tables by AI Assistant

コードの間違いを修正する

一部のコードが機能しない場合は、AI Assistant にコードに間違いがないか確認して修正するよう依頼できます。

間違いのある次のコードを例として使用してみましょう。

CREATE FUNCTION film_not_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) RETURNS SETOF integer AS $_$ SELECT inventory_id FROM inventory WHERE film_id = $1 AND store_id = $2 AND NOT inventory_in_stock(inventory_id); $_$ LANGUAGE sql;

ここでの間違いは、宣言された関数に出力パラメーター p_film_count があるのに、SQL 本体がそれを計算したり返したりしていないことです。さらに、関数は SETOF integer を返すように宣言されていますが、SELECT ステートメントの結果のみを返します。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. 入力フィールドにプロンプトを入力し、コードを貼り付けて、コード修正を要求し、Enter を押します。

    必要に応じて、次のプロンプトに追加して修正してください。

修正されたコード:

CREATE FUNCTION film_not_in_stock(p_film_id integer, p_store_id integer) RETURNS integer AS $$ DECLARE p_film_count integer; BEGIN SELECT COUNT(inventory_id) INTO p_film_count FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id); RETURN p_film_count; END; $$ LANGUAGE plpgsql;
SQL code mistakes correction request and fixed code

ある DBMS から別の DBMS にコードを移行する

ある DBMS から別の DBMS にデータベースオブジェクトを移行することは、データの移行、スキーマの変換などの手順を伴う複雑なタスクです。AI Assistant に、データベースオブジェクトのソースコードの移行スクリプトを生成するように依頼できます。

例として、PostgreSQL Sakila スキーマの次の inventory_held_by_customer プロシージャを使用します。

CREATE FUNCTION inventory_held_by_customer(p_inventory_id integer) RETURNS integer LANGUAGE plpgsql AS $$ DECLARE v_customer_id INTEGER; BEGIN SELECT customer_id INTO v_customer_id FROM rental WHERE return_date IS NULL AND inventory_id = p_inventory_id; RETURN v_customer_id; END $$; ALTER FUNCTION inventory_held_by_customer(integer) OWNER TO guest;

AI Assistant がコードを移行するには、プロンプトに移行の詳細を入力します。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. 入力フィールドにプロンプトを入力します。元の DBMS とターゲット DBMS を定義し、移行するデータベースオブジェクトの DDL を貼り付けて、Enter を押します。

    必要に応じて、次のプロンプトに追加して修正してください。

生成された移行スクリプト:

CREATE FUNCTION inventory_held_by_customer(p_inventory_id integer) RETURNS INTEGER DETERMINISTIC BEGIN DECLARE v_customer_id INTEGER; SELECT customer_id INTO v_customer_id FROM rental WHERE return_date IS NULL AND inventory_id = p_inventory_id; RETURN v_customer_id; END;
SQL code migration using AI Assistant

コードをフォーマットする

インデントや改行、大文字と小文字の統一などがされていないコードは読みにくい場合があります。このようなコードを読みやすくするには、AI Assistant を使用して、推奨するコードスタイルに従ってフォーマットします。

次のような形式が不適切な SQL コードを例として使用します。

SELECT e.firstName,e.lastName,d.name,p.projectName FROM employees e join departments d on e.departmentId=d.id INNER JOIN employee_projects ep on e.id=ep.employeeId INNER JOIN projects p on ep.projectId=p.id where e.salary>50000 AND d.name='Sales' AND p.status='active'

AI Assistant でコードをフォーマットするには、プロンプトで希望するコードフォーマットルールを記述します。

  1. ツールバーで、the More tool windows icon 他のツールウィンドウをクリックし、 AI Assistant を選択して AI Assistant ツールウィンドウを開きます。

  2. 入力フィールドに、フォーマットルールを含むプロンプトを入力し、フォーマットするコードを貼り付けて、Enter を押します。

    必要に応じて、次のプロンプトに追加して修正してください。

フォーマットされたコード:

SELECT e.first_name, e.last_name, d.name, p.project_name FROM employees AS e JOIN departments AS d ON e.department_id = d.id INNER JOIN employee_projects AS ep ON e.id = ep.employee_id INNER JOIN projects AS p ON ep.project_id = p.id WHERE e.salary > 50000 AND d.name = 'Sales' AND p.status = 'active';
SQL code formatting using AI Assistant

関連ページ:

AI Assistant

AI Assistant プラグインをインストールするこの機能は、インストールして有効にする必要がある AI Assistant プラグインに依存しています。を押して設定を開き、を選択します。マーケットプレースタブを開き、AI Assistant プラグインを見つけて、インストールをクリックします (プロンプトが表示されたら、IDE を再起動します)。AI Assistant は、ソフトウェア開発に AI を活用した機能を提供します。コードの説明、コードの断片に関する質問への回答、コードの提案の提供、...

データを表示する

データベースエクスプローラー (表示 | ツールウィンドウ | データベースエクスプローラー) でテーブルをダブルクリックすると、テーブル、ビュー、仮想ビューがデータエディタータブで開きます。データ表示モード:データは、Table、ツリー、テキスト、入れ替えの 3 つのモードで参照および編集できます。これらのモードを切り替えるには、指定形式で表示ボタン () をクリックして、必要なモードを選択します。入れ替え: 行と列が入れ替わる表示モード。このチェックボックスを他の表示モードと組み合わせることが...

データ抽出

データ抽出は、エディター (テキストエディター表示モード) でデータをコピーまたは表示する方法のルールを設定します。データのエクスポートアイコン () の近くにあるデータ抽出リストからデフォルトのエクストラクターを選択したり、既存のエクストラクターを構成したり、Groovy または JavaScript を使用してカスタムエクストラクターを作成したりできます。最後に選択したエクストラクターが、新しく開いたエディタータブのデフォルトのエクストラクターになります。MongoDB の場合、デフォルトの...

ユーザーインターフェース

DataGrip で新しいプロジェクトを開くと、IDE に基本的な要素といくつかの便利なショートカットが表示されます。DataGrip の主なユーザーインターフェース要素は次のとおりです。ツールバー。データベースエクスプローラー (ツールウィンドウ)。ファイルツールウィンドウ。クエリコンソール。データエディターとビューアー。ポップアップメニュー、コンテキストメニュー。サービスツールウィンドウ。クエリ結果タブ。ナビゲーションバー。ステータスバー。

Git リポジトリのセットアップ

既存の Git リポジトリのクローンを作成するか、既存のプロジェクトを Git バージョンコントロール下に置くと、DataGrip はコンピューターに Git がインストールされているかどうかを自動的に検出します。IDE が Git 実行可能ファイルを見つけられない場合、それをダウンロードすることを提案します。DataGrip は、Windows10 バージョン 2004 で使用可能な Windows Subsystem for Linux 2 (WSL2) の Git をサポートします。Git...

SQL ダンプファイルをインポートする

このチュートリアルでは、DataGrip で SQL ダンプファイルを実行する方法を学習します。MySQL と PostgreSQL の場合、DataGrip はダンプツールをサポートしています。使用方法の詳細については、MySQL と PostgreSQL の完全なデータダンプを復元するを参照してください。始める前に:以下のものがあることを確認してください。すぐに使用できる実行中のデータベースインスタンス。DataGrip では、データベースインスタンスに接続できるデータソースです。SQL...