---
url: /v6.2/dataset-sqlscript.md
---
# SQL 查询数据集

SQL 查询数据集是指通过自定义 SQL 语句定义数据集条件来获取数据的一种数据集。

## 创建数据集

请参照如下步骤创建 SQL 查询数据集。

1. 在数据集界面，点击新建数据集，选择 SQL 查询数据集。
   ![](/images/data-management/dataset-sqlscript-create.png)

2. 在数据连接中选择创建数据集使用的数据连接。
   ![](/images/data-management/dataset-sqlscript-002.png)

   > \[!TIP] 提示
   > 如果没有找到期望的数据连接，需要联系数据管理员将所需的[`数据连接`](connection-intro.md)进行授权后使用。

3. 在编辑区内编写 SQL 代码，定义数据集条件。 点击执行查看效果，确认没问题后点击下一步。
   ![](/images/data-management/dataset-sqlscript-003.png)
   > \[!TIP] 提示
   > 每次 SQL 语句修改，都需要点击执行，执行成功后，才能继续下一步。

4. 进入数据结构页面，可以设置字段别名和类型。
   ![](/images/data-management/dataset-sqlscript-004.png)

   支持设置开启加速引擎，开启后该数据集导入加速引擎中。

5. 点击导入后，设置数据集名称，完成数据集创建。

## 动态宏

SQL 查询数据集支持动态宏，可以动态的定义数据集创建条件，数据集的内容随动态宏变化而变化。

### 动态宏定义方式

动态宏以`{{!!`开始，以`}}`结束，中间代码为 SQL 类型，如图所示。

![](/images/data-management/dataset-sqlscript-005.png)

> \[!TIP] 提示
>
> 1. 动态宏中的代码必须返回 String 或者数字类型的值，并且只能有一个字段且只有一个值，否则抛出异常。
> 2. SQL 数据集的处理顺序是先进行参数和用户属性替换，再进行动态宏的解析执行。

### 动态宏使用示例

动态宏是把传进来的宏值当成表达式进行计算，然后再把计算得到值做为宏值进行传入。 这种方式可以用在无法进行表达式计算的 SQL 函数中。

如 MySQL 数据源中的 limit 函数无法进行表达式计算，对于每次检索两条数据 `select * from table1 limit n*2,2 `的需求 limit 无法实现，这种情况下可以使用动态宏来实现。

在创建数据集时，通过参数表达式动态改变检索的起始位置，每次检索出两条数据。
![](/images/data-management/dataset-sqlscript-006.png)

效果展示如图所示，左侧表格通过动态宏实现`limit n*2,2 `，每次检索两条数据。右侧表格通过动态宏实现` limit 0,2*n`，每次检索两条数据，叠加展示。 两个表格通过同一个参数动态控制检索内容。

![](/images/data-management/dataset-sqlscript-007.gif)
