AI Assistant Help

在 DataGrip 中使用 AI Assistant

AI Assistant 提供 AI 驱动的软件开发功能。 有关 AI Assistant 的更多信息,请参阅 快速入门 主题。

在本教程中,我们将学习如何使用 AI Assistant 执行以下任务:

创建数据聚合器与提取器

如果您需要自定义数据聚合器或提取器,您可以请求 AI Assistant 为您的任务创建一个聚合器或提取器,然后将生成的脚本添加到 聚合器 提取器 目录中。

为 LLM 提供一个可用脚本的示例可能会减少提示与更正的次数。 在 AI Assistant 中,您可以在 Project 工具窗口 Alt+1 Scratches and Consoles | 扩展 | 数据库工具和 SQL | 数据 下找到捆绑的脚本。

有关聚合器和提取器的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/tables-view-data.html#aggregate-viewhttps://www.jetbrains.com/zh-cn/help/datagrip/data-extractors.html

在本教程中,我们将创建一个聚合器,并使用以下 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") }

在 AI Assistant 中,您可以在 Project 工具窗口的 Scratches and Consoles | 扩展 | 数据库工具和 SQL | 数据 | 聚合器 下找到此脚本。

步骤 1。 步骤 1:请求脚本

  1. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 AI Assistant 以打开 AI Assistant 工具窗口。

  2. 在输入字段中输入提示。 描述所需的脚本,并向 LLM 提供一个可用脚本的示例。

  3. 在生成脚本的字段右上角,点击 “复制到剪贴板”图标复制到剪贴板 以将代码复制到剪贴板。

生成的脚本:

/* * 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") }
数据聚合器与提取器脚本创建

步骤 2。 步骤 2:将脚本保存为文件

  1. 您可以通过以下任一方式打开 Project 工具窗口:

    • 在主菜单中,进入 视图 | Tool Windows | Files.

    • 按下 Alt+1

  2. 请导航至 Scratches and Consoles | 扩展 | 数据库工具和 SQL | 数据 | 聚合器

  3. 右键点击 聚合器 节点并选择 新建 | 文件

  4. 新建文件 弹出窗口中,输入新文件名。 例如, most_frequent_values.groovy

  5. 将您的新数据聚合器脚本粘贴到文件中。

    (可选)如果出现 转换粘贴的代码 对话框,请按 取消。 在本教程中,我们保存生成的脚本本身。

新的数据聚合器会出现在数据编辑器的 状态栏 的聚合器列表中,并可与您的数据一起使用。

将创建的脚本粘贴到新文件中

使用自然语言请求查询与信息

AI Assistant 可以为您的架构提供洞察,也可以根据自然语言请求为架构生成 SQL 查询。 访问您的架构后,它将分析结构并为您提供请求的查询或信息。

为了演示目的,我们将使用导入到 ai_demo 数据库中的 PostgreSQL Sakila 架构。 您可以通过克隆 dumps 仓库获取转储文件。

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

有关克隆仓库的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/set-up-a-git-repository.html。 有关在 AI Assistant 中运行转储文件的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/import-sql-dump-files.html

步骤 1。 步骤 1:附加您的架构

为了授予 LLM 访问您的数据库架构的权限,请在 AI Assistant 工具窗口中将架构附加到聊天。

  1. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 AI Assistant 以打开 AI Assistant 工具窗口。

  2. AI Assistant 工具窗口中,点击输入字段上方的 架构图标附加模式 ,然后选择您想附加的架构。 在本例中,它是 ai_demo.public

  3. 如果出现 附加模式 对话框,请点击 Attach 以附加架构。

将 ai_demo.public 架构附加到 AI Assistant 聊天中

步骤 2。 步骤 2:在聊天中提问

  • 请求 AI Assistant 生成特定查询,或提供有关您的架构的特定信息。请参考以下示例: 请考虑以下示例:

    1. 请求生成查询。

      基于自然语言请求的查询生成
    2. 请求获取有关架构的洞察。

      基于自然语言请求的架构洞察
    3. 请求执行搜索。

      使用自然语言的搜索请求

使用 EXPLAIN PLAN 优化架构与查询

AI Assistant 可以通过使用 EXPLAIN PLAN 命令帮助您优化架构与查询。 访问您的架构后,它可以分析方案并建议优化内容。

为了演示目的,我们将使用导入到 ai_demo 数据库中的 PostgreSQL Sakila 架构。 您可以通过克隆 dumps 仓库获取转储文件。

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

有关克隆仓库的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/set-up-a-git-repository.html。 有关在 AI Assistant 中运行转储文件的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/import-sql-dump-files.html

在本教程中,我们将使用以下查询:

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。 步骤 1:运行 EXPLAIN PLAN 命令

获取并复制您希望 AI Assistant 分析的 EXPLAIN PLAN

  1. 在 查询控制台 中,右键点击您的查询并导航至 执行计划 | 执行计划(原始)

  2. 在结果选项卡中,按 Ctrl+ACtrl+C 将结果复制到剪贴板。

有关 EXPLAIN PLAN 命令的更多信息,请参阅 https://www.jetbrains.com/zh-cn/help/datagrip/query-execution-plan.html

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

步骤 2。 步骤 1:附加您的架构

为了授予 LLM 访问您的数据库架构的权限,请在 AI Assistant 工具窗口中将架构附加到聊天。

  1. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 AI Assistant 以打开 AI Assistant 工具窗口。

  2. AI Assistant 工具窗口中,点击输入字段上方的 架构图标附加模式 ,然后选择您想附加的架构。 在本例中,它是 ai_demo.public

  3. 如果出现 附加模式 对话框,请点击 Attach 以附加架构。

将 ai_demo.public 架构附加到 AI Assistant 聊天中

步骤 3。 步骤 3:请求优化建议与命令

请求 AI Assistant 分析您的查询的 EXPLAIN PLAN 并提出可能的优化建议。

  1. 在输入字段中输入提示,按 Ctrl+V 粘贴 EXPLAIN PLAN ,然后按 Enter

    查询优化提示与建议
  2. 输入另一个提示,请求所需命令以实现建议的优化,然后按下 Enter

    建议优化的命令

步骤 4。 步骤 4:运行建议的 CREATE INDEX 命令

  • 选择命令,并通过点击工具栏上的 执行图标执行 或按下 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 将创建已定义的数据库对象,您可以在 输出 标签页的 Services 工具窗口中查看输出。

执行建议优化的命令

步骤 5。 步骤 5:为优化后的架构与查询运行 EXPLAIN PLAN

  • 在生成的 CREATE INDEX 命令字段的右上角,点击 “在插入符号处插入代码片段”图标在插入符号处插入代码片段 ,将代码插入到 查询控制台 中。

    建议的优化查询:

    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

比较两个数据库对象的 DDL

在获得对您的数据库架构的访问权限后,AI Assistant 可以分析其内容并比较数据库对象的 DDL。

让我们比较 actoractor_test 表,它们位于 testing.public 架构中。

Database 工具窗口中的 actor 与 actor_test 表

步骤 1。 步骤 1:附加您的架构

为了授予 LLM 访问您的数据库架构的权限,请在 AI Assistant 工具窗口中将架构附加到聊天。

  1. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 AI Assistant 以打开 AI Assistant 工具窗口。

  2. AI Assistant 工具窗口中,点击输入字段上方的 架构图标附加模式 ,然后选择您想附加的架构。 在本例中,它是 ai_demo.public

  3. 如果出现 附加模式 对话框,请点击 Attach 以附加架构。

将 testing.public 架构附加到 AI Assistant 聊天中

步骤 2。 步骤 2:比较表的 DDL

  1. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 AI Assistant 以打开 AI Assistant 工具窗口。

  2. 在输入字段中,输入您的提示并按下 Enter

    AI Assistant 将比较 DDL 并解释差异。

AI Assistant 对两个表的 DDL 进行比较

修复代码错误

如果某些代码无法运行,您可以请求 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. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 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 代码错误更正请求与修正后的代码

将代码从一个 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. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 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;
使用 AI Assistant 迁移 SQL 代码

格式化代码

读取没有缩进、换行或统一大小写的代码会很困难。 为了使这些代码更易于阅读,请使用 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. 在工具栏中,点击 更多工具窗口图标More tool windows ,然后选择 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';
使用 AI Assistant 设置 SQL 代码格式
最后修改日期: 2025年 12月 5日