---
order: 9
navTitle: 输出加工结果
indexTitle: 输出加工结果
---
# 输出加工结果

默认情况下，每个数据加工模型都会输出一个[数据库表](../../data-gov/GLOSSARY.md#data-table)（通过加工流程图最后的[模型输出](../transform/model-output.md)节点），可以把这个输出的[数据库表](../../data-gov/GLOSSARY.md#data-table)看成是一个数据仓库中的[事实表](../../data-gov/GLOSSARY.md#fact-table)或[维表](../../data-gov/GLOSSARY.md#dimension-table)，加工输出的数据库表和数据加工是一一对应的，数据加工被报表或仪表板引用时其数据即来源于对应的数据库表。

## 输出虚拟的数据表{#virtual}

当有动态参数（可参考文档[设置动态加工参数](../setting-params.md)）或者需要查询实时数据时，可以不勾选提取数据。不提取数据时，数据加工可以看成一张的虚拟表，类似数据库中的视图，查询时直接执行加工逻辑的SQL语句。

## 输出物化的数据表{#materialized}

勾选**提取数据**时，可以将加工的数据输出到一张[目标数据库表](../../data-gov/model/model-settings.md#dest-table)中，通常用于数据仓库系统中将来源业务库的表加工后提取到目标数据库中时设置，与[虚拟数据表](#virtual)相比，查询时的性能会更好。

提取数据的数据加工有两个基本的特征：

- 每个数据加工对应一个数据库表
- 数据加工对应的数据库表是加工流程图最后的模型输出节点中设置的目标数据库表

实际使用中，提取数据分为两种场景：[提取到指定表](#extract-spec-table)和[使用上游节点的表](#use-upstream-table)。

### 提取到指定表{#extract-spec-table}

在**模型输出**节点下，选择**数据面板**>**模型属性**，勾选**提取数据**：

![提取到指定表](./images/2021-09-01-10-09-51.png)

示例地址：[门店月销汇总表](https://demo.succbi.com/v5/DEMO/data?:open=fcby8R17NfCga3tclsn2lB&:expandIds=aqphlalN1SEgYW8sP8ZKjD)

勾选后，出现的下拉框中默认会选中**提取到指定表**，即将加工数据提取到一个指定的数据库物理表中，具体设置介绍见[模型属性-提取数据](../../data-gov/model/model-settings.md#extract-data)，该方式在提取数据时是最常见的，适用于先对来源数据进行清洗加工最后再输出加工结果数据的场景。

### 使用上游节点的表{#use-upstream-table}

通常数据加工过程都是先加工最后再输出数据的，此时采用[提取到指定表](#extract-spec-table)方式即可，但是实际应用时有些特殊的场景下目标数据已经在前面的加工流程中落地到数据库表中了，而不希望在模型输出节点的属性上重新指定新的数据库表，则可以选择使用**使用上游节点的表**，主要对应如下几种使用场景：

1. 加工数据已经在加工流程图的表输出节点中落地输出到数据库表，需要进一步对该数据库表的某些字段进行更新

![更新](./images/2021-09-01-10-38-24.png)

示例地址：[更新](https://demo.succbi.com/v5/DEMO/data?:open=fgtdGt3PTUBfG1y2rwTMUE)

示例加工中主要包含如下三个步骤：

- 将来源文件源中城镇单位就业人员历年的平均工资（其中缺乏2018年的数据）使用[表输出](../transform/table-output.md)节点提取到数据库表中。
- 将2018年的就业工资数据更新到上一步输出的数据库表字段中。
- 模型输出节点选择使用上游节点的表，目标数据库表自动设置为前序节点-[更新节点](../transform/update.md)中的更新主表。

2. 数据库表是在加工过程中使用SQL组件调用数据库存储过程中生成的，需要将外部生成的数据库物理表直接作为数据加工模型的目标数据库表

![调用存储过程](./images/2021-09-01-11-05-53.png)

示例地址：[调用存储过程](https://demo.succbi.com/v5/DEMO/data?:open=UMERuvWbQBNqgFzrKasP5F)

示例加工中主要包含如下三个步骤：

- 在SQL组件中调用数据库存储过程加工数据，存储过程处理好数据后会输出到一张目标表（表名：`fact_dvd_vip_cust`）中。
- 在SQL节点添加一个后序节点-数据库表，并引入存储过程中输出的数据库表`fact_dvd_vip_cust`。
- 数据库表节点后序节点添加模型输出，并设置为使用上游节点的表，即将`fact_dvd_vip_cust`直接作为当前数据加工模型的目标数据库表。

::: tip 提示

1. 选择**使用上游节点的表**的**前提条件**是目标数据库表在前面的加工流程图中已经存在或者生成，鉴于这样的应用场景，数据加工中限制只有当模型输出的前序节点是**更新**、**表输出**、**数据库表**、**模型表**四种节点时，模型输出上才能选择**使用上游节点的表**。
2. 通常数据加工模型对应的目标数据库表的属性，比如字段类型、长度等是直接在模型输出节点上管理的，但是对于**使用上游节点的表**时需要遵循一个原则：**数据库表在哪里产生其物理层信息（如主键、字段类型、长度）就在哪里管理**，同时数据加工也做了如下的强制限制：
   - 模型输出节点的字段列表上禁用了字段类型、长度等选项。
   - 模型属性的主键设置只能从数据库表读取，手动设置的主键不能往数据库表中同步。
   - 模型属性的**性能优化** > **索引管理**标签页被隐藏，其中有个特殊情况是，如果数据库表是在加工流程中的表输出节点生成的，那么允许在模型输出节点的索引管理中管理索引信息，主要原因是表输出节点不具备索引管理能力，需要模型输出节点赋予该项能力。
     :::

### 数据提取方式{#extractmethod}

将数据更新到目标数据库表的方式，支持以下六种类型的提取方式：

1. 重建表
2. 全量覆盖
3. 清空旧数据并插入新数据
4. 按主键合并追加
5. 只追加
6. 插入缓慢变化数据并自动更新起止时间

可根据实际的使用场景进行选择，详细的使用介绍请查看[模型属性-提取方式](../../data-gov/model/model-settings.md#extract-mode)。
