---
order: 17
navTitle: SQL
---
# 加工组件：SQL

通常使用数据加工处理数据并不需要手动编写SQL语句，但数据加工仍然支持通过添加**SQL组件**来使用SQL的方式加工数据，在实现一些复杂或数据库中特有语法逻辑时可以使用，比如[调用数据库存储过程](./stored-procedure.md)、删除数据或更新数据等。

按照使用场景，SQL组件可以**作为输入节点**和**作为加工节点**添加。

::: warning 警告
SuccBI中不建议使用SQL进行数据处理，原因如下：

1. 系统不能自动分析模型与SQL中引用表的依赖关系，需要手动进行设置，参考[管理存储过程的血统](./stored-procedure.md#mgr-pedigree)
2. SQL的语法在各数据库中均有差异，不利于数据库之间的迁移
   :::

## SQL作为输入节点{#input-node}

在数据加工界面的顶部工具栏中点击**组件** > **SQL**添加，如下：

![SQL组件](./images/2021-07-20-15-59-16.png)

示例地址：[SQL节点-输入节点](https://demo.succbi.com/v5/DEMO/data?:open=tQLsZJOLARHBtIrd6K5zc)

添加的**SQL组件**将作为一个输入节点，可以在下方的SQL输入区域中输入一个或多个SQL(多个SQL用分号`;`分隔，可以包含符合当前数据库语法的任何语句，如创建表、插入、更新、删除等)，此时作为数据来源通常需要以查询语句（`SELECT语句`）作为最后一条SQL语句，查询出来的结果集将向后传递，并在模型输出节点中可落地为数据库表。

::: tip 提示

1. SQL作为输入节点也可以只对已存在的数据库表进行更新、删除等操作，而不生成新的表，其后序节点是一个数据库表节点（引用的表是SQL中进行处理的表），模型输出中选择[使用上游节点表](../data-output/README.md#use-upstream-table)，使用方式参考[调用数据库存储过程](https://demo.succbi.com/v5/DEMO/data?:open=tQLsZJOLARHBtIrd6K5zc)。
   :::

## SQL作为加工节点{#dataflow-node}

在数据加工的**表输出**节点后作为**后序节点**添加，如下：

![SQL节点](./images/2021-07-20-16-34-28.png)

示例地址：[SQL节点-表输出后序节点](https://demo.succbi.com/v5/DEMO/data?:open=P1R1K7HjmNDT0zGa7YzJeE)

添加的**SQL组件**通常用来对**表输出**中落地的数据库表进行更新或删除，此时可以编写SQL进行更新或使用[更新组件](./update.md)更新。

::: tip 提示

1. 除了表输出，SQL节点在其他组件的后序节点下拉列表中是灰色的，不可添加
2. 加工中通过SQL或更新组件对数据库中已存在的数据库表进行处理后，又需要将该表作为加工的模型输出表，需要使用到提取数据的[使用上游节点表的机制](../data-output/README.md#use-upstream-table)
   :::

## SQL中输入使用参数{#ref-variables}

SQL节点可以通过`${参数名}`的方式引用模型中定义的参数，需要注意的是，SQL中的引用参数会忽略参数的类型，直接采用`文本替换`的方式生成SQL，所以需要区分数据类型进行处理，如下：

1. 如果字段是字符型，则需要左右添加单引号引用

```sql
SELECT RXDID AS 日销单ID,
		 MD AS 门店,
         SPSJ AS 商品数量
		 YSSJ AS 交易时间
FROM ODS_FS_RXD
WHERE RXDID = '${日销单ID}'
```

2. 如果字段是数值型，则无需单引号

```sql
SELECT RXDID AS 日销单ID,
		 MD AS 门店,
         SPSJ AS 商品数量
		 YSSJ AS 交易时间
FROM ODS_FS_RXD
WHERE SPSJ > ${商品数量}
```

3. 如果字段是日期型，则需要先使用数据库函数转为日期类型

```sql
SELECT RXDID AS 日销单ID,
		 MD AS 门店,
         SPSJ AS 商品数量
		 YSSJ AS 交易时间
FROM ODS_FS_RXD
WHERE YSSJ > TO_DATE('${日期}','yyyymmdd')
```
