SuccBI+低代码文档中心 —数据(数据加工)(重点)

概述

数据加工(也叫ETL,英文Extract-Transform-Load的缩写)是将业务系统中已存在的数据抽取(extract)、转换(transform)、加载(load)至数据仓库的过程。SuccBI提供了图形化的自助式数据加工,通过简单的、拖拽式的可视化操作,业务用户也能轻松的完成数据的处理加工。
在这里插入图片描述
SuccBI的数据加工提供了多种协同视图,让你在任何加工步骤都能及时观察和掌控数据处理流程、输出结果数据、输出字段情况、加工SQL逻辑。
加工流程视图
图形化展示,加工过程一目了然
任意切换节点,轻松来回调试
数据列表视图
查看节点输出的字段和数据,可快速搜索定位字段
自动将编码转为文本,用业务话的语言展示数据
字段列表视图
可查看、编辑节点字段的属性,包括字段的类型、长度、关联表、默认值等
快速查看维度和度量的数目
SQL逻辑视图
预览运行在数据库上的加工SQL逻辑,便于理解和定位数据问题

一站式建设企业级数据仓库
在这里插入图片描述
SuccBI的数据加工是基于元数据的架构之上进行管理,融合了数据加工、模型管理等能力,简化数据仓库管理,支持分级数据仓库管理,使业务用户自助管理数据仓库成为可能。

简化数据仓库管理
加工数据的过程中已经完成了数据建模、元数据管理、调度策略等
做到自助数据仓库管理
支持分级数据仓库管理

支持个人、部门、中央3级数据仓库管理
个人模型只是个人使用
部门模型部门内部使用
中央数据仓库共集团共用
每级数据仓库可以各自分散管理,不必都依赖IT部门

数据加工设计器

在这里插入图片描述
工具栏:工具栏提供了数据加工所需的加工组件,以及对数据加工进行保存及提取数据、查看数据提取日志等操作。
加工流程图:此区域用于绘制加工流程图,对数据加工进行编辑,添加加工节点及模型输出等。
数据面板:用于展示表中的数据,每一个加工步骤下,数据都将进行一次刷新。可点击数据面板上方工具栏中的按钮,切换数据面板中的显示内容为:数据列表、字段列表,以及预览SQL。
属性面板:属性面板中会显示各加工节点下对应的加工步骤及相关属性设置。

引入待加工数据

在这里插入图片描述
在这里插入图片描述

引入节点属性设置

引入的来源表节点可以在数据加工设计器的左下角进行相关属性设置。预览数据集,预览数据集查询时只查询抽样数据,常用来提升查询性能。

提取前检查
提取前检查是指数据加工在执行数据提取到目标库前对来源表进行的检查,**加工中只有所有来源表都满足提取前检查时,才会真正执行数据的提取。**全量提取时,系统会先清空目标表再提取数据,这样可能会导致数据仓库数据丢失,为了保证数据的安全性,可以在提取前先进行检查,如果发现错误就不提取,主要有以下两种情况:

  • 避免上游数据错误时(比如来源表中数据被清空)执行提取,导致数据仓库数据丢失。
  • 避免上游数据结构变化时导致提取错误。
    在这里插入图片描述
    在这里插入图片描述

绘制加工流程图

加工流程图描述了一个数据加工的内部过程,图中的每个节点可能代表一个表、加工转换或关联等,数据加工的过程其实就是不断的“绘制”这个加工流程图的过程,一个典型的数据加工流程图示例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加加工流程分支

添加分支用于在已有数据加工流程中添加另一个加工分支,复用相同的加工部分。添加分支后可以在新分支上继续对数据进行加工处理,完成后可以使用表输出生成物理表。
在这里插入图片描述
在这里插入图片描述

清洗和加工数据(重点)

在这里插入图片描述

添加分组字段

分组字段,是对数据表中字符型或者日期型的数据重新分类,根据两级层次结构生成一个新的分组。
TIP:对于数值型的数据,做分类处理时可以创建分段字段,参考添加分段字段。
在这里插入图片描述
编辑分组字段
对已经保存的分组字段进行编辑操作,有多种进入编辑框的方式:

  • 在数据列表或者字段列表中右键点击分组生成的字段,进入到编辑框。
  • 在列加工步骤中选中分组步骤,右键选择编辑进入分组字段的编辑框。
    在这里插入图片描述
    删除分组字段
    加工步骤中,不需要分组字段时可以删除,有多种删除方式:
  • 选中分组字段步骤鼠标右键,选择移除将字段移除
  • 列加工步骤中右键删除
  • 选中步骤右侧会显示×按钮,将分组字段从数据加工中移除
    删除后,在界面没有刷新前,可以通过撤销找回被删除的分组字段。移除分组字段后,不会对分组字段之前的加工节点造成影响,但是会影响后面引用此分组字段的节点,会生成无法识别的变量。
    在这里插入图片描述

添加分段字段

分段字段,是将数据表中数值型的数据进行分段处理,生成新的数据分组字段。
TIP:对于字符型或日期型的数据,做分类处理时可以创建分组字段。

列加工

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文本转ID

将列表中的文本转为文本对应的ID,进行转换的文本和ID必须有维表对其进行关联。
在这里插入图片描述
在这里插入图片描述

关联

关联用于获取来自其他表的数据,类似于SQL里的join。
在这里插入图片描述

关联方式

根据功能不同,关联方式分为如下3种:
1、左连接:数据表关联后的结果集保留的是主表的所有数据行,以及副表中与主表匹配的数据行,两张表的列都保留。
在这里插入图片描述
2、内连接:数据表关联后的结果集保留的是两张表的交集,两张表的列都保留。
在这里插入图片描述
3、全连接:数据表关联后的结果集保留的是两张表的并集,两张表的列都保留。
在这里插入图片描述
TIP:MySQL数据库不支持全连接,系统默认当左连接处理。
在这里插入图片描述
连接条件
数据表进行关联时的匹配条件,系统默认的连接条件规则如下:
1、如果设置了全局关联关系,系统自动采用全局的关联关系,见文档:全局关联关系。
2、如果没有设置全局关联关系,系统默认根据主表和副表相同的字段名称设置连接条件,默认最多显示5条连接条件。
3、当默认连接条件不满足时,可以点击添加连接条件,如添加关联条件为:进销存月.销售单位=月销汇总表.销售单位

联合

联合用于合并两个或多个数据表中的数据,将各表中列名相同的数据合并到一起。若某列数据只存在于部分表中,那么联合结果中其他表对应的该列数据为空。
在这里插入图片描述
在这里插入图片描述

更新

更新用于根据一定的条件,对原始数据表中已有字段的数据进行修改,相当于sql语句中的update。当最终输出表的一部分字段数据不是存在业务表中,需要通过与相应的数据表关联来获取的时候,可以使用更新。

更新方式
根据数据是否来源于其他数据表,更新的方式分为以下2种:
1、单表更新:数据来源为常量或者当前数据表的其他字段。
2、关联更新:数据来源为其他数据表的某个字段。

在这里插入图片描述
在这里插入图片描述

加工组件:汇总

汇总的作用是根据所选分组字段对数据进行分类汇总(分组),相当于sql语句中的group by。
分组字段
可选一个或多个维度和度量,将查询结果按所选分组字段进行分组,字段值相同的为一组。
汇总方式
汇总节点会自动对数值字段求合计,并隐藏非数值字段。
汇总方式可选合计、计数、平均值、最大值、最小值、计数(不同)、第一条、最后一条。
在这里插入图片描述
添加汇总字段
如销售明细表中的数据有销售日期,销售金额、成本价格及销售数量等字段,汇总时想要按照月份汇总销售单位的销售利润,可以新增字段【销售月份】、【利润】,参考文档《添加计算字段》
在这里插入图片描述

加工组件:表输出

当一个加工流程需要生成多张物理表时,可以使用表输出。
在这里插入图片描述
在这里插入图片描述

有关行列转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加工组件:脚本

脚本组件是使用脚本进行加工一些难以用SQL实现的逻辑,实现对数据表的转换。
如将JSON格式的数据转化为多个字段:
在这里插入图片描述

/**
* 脚本返回类型,必须定义,后台会根据返回结果做不同处理
* 1. Table,在物理表基础上再做加工
* 2. Sql,在sql基础上再做加工
* 3. Stream,流式加工数据
* 4. None,无结果
*/
function getReturnType(): ScriptNodeDataType {
    return ScriptNodeDataType.Stream;
}

/**
 * 脚本节点的执行入口。下面几种情况会触发脚本节点的执行:
 * 1. 后端定时调度加工模型
 * 2. 用户手工调度加工模型
 * 3. 前端用户预览脚本节点的数据
 */
function onProcessScriptNode(context: IDataFlowScriptNodeContext): void {
    //在这里输入脚本节点的业务逻辑代码
    let inputData = context.getInput();
    let outputData = context.getOutput();
    // 可直接将前序节点的字段设置到输出字段中,然后将多的给删掉
    outputData.setFields(inputData.getFields());
    outputData.removeField("TITLE");
    outputData.removeField("CAST");

    // 可直接传入值
    outputData.addField("cast_id", FieldDataType.I);
    outputData.addField("character");
    // 可传入一个json
    outputData.addField({ name: "gender", dataType: FieldDataType.I });
    outputData.addField({ name: "credit_id" }, 3);
    // 可添加多个字段
    outputData.addFields([{ name: "name" }, { name: "order", dataType: FieldDataType.I }]);

    // 先将所有的字段顺序定下来,避免存储数据时重复查找字段
    let fields: DbFieldInfo[] = outputData.getFields() || [];
    let fieldCount = fields.length;
    // 定义在这里,复用一个行对象,节省内存
    let outRow: any[] = new Array(fieldCount);
    // 读取前2行数据进行转换,测试
    for (let i = 0; i < 2; i++) {
        let srcRow = inputData.nextRow();
        let castObj = JSON.parse(srcRow[2]);
        castObj.forEach(data => {
            outRow[0] = srcRow[1];
            for (let j = 1; j < fieldCount; j++) {
                outRow[j] = data[fields[j].name];
            }
            outputData.writeRow(outRow);
        });
    }
}

加工组件:SQL

通常使用数据加工处理数据并不需要手动编写SQL语句,但数据加工仍然支持通过添加SQL组件来使用SQL的方式加工数据,在实现一些复杂或数据库中特有语法逻辑时可以使用,比如调用数据库存储过程、删除数据或更新数据等。
按照使用场景,SQL组件可以作为输入节点和作为加工节点添加。
!警告:
SuccBI中不建议使用SQL进行数据处理,原因如下:
1、系统不能自动分析模型与SQL中引用表的依赖关系,需要手动进行设置,参考管理存储过程的血统。
2、SQL的语法在各数据库中均有差异,不利于数据库之间的迁移。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加工组件:存储过程

通常使用数据加工处理数据不需要使用存储过程,但如果数据库中已经有存储过程了,数据加工支持通过SQL组件调用存储过程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管理存储过程的血统
存储过程加工模型的逻辑位于产品环境外部(数据库服务器中),此时数据加工不能自动解析出输出表的血统关系,只能通过手工编辑字段的取数公式或取数条件来管理模型的血统。
操作步骤
1、在模型输出的字段列表上编辑取数公式。
在这里插入图片描述
2、取数公式的表达式对话框中添加引用表,引入存储过程加工中使用到的模型。
在这里插入图片描述
3、输入取数口径表达式
在这里插入图片描述

性能优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提前过滤数据
如果数据加工需要在输入表上过滤数据,则将过滤条件设置尽可能的靠前。对于数据库,部分数据库优化器比较智能能自动将过滤条件下沉,但是也存在数据库的优化器不够智能而无法提前过滤数据,扫描不必要的数据行,导致额外的资源开销。另外,在某些跨源加工中,比如跨源表关联、跨源增量提取,系统会将跨源的表先提取到目标数据源的临时表中再进行处理,如果在跨源提取时能提前过滤数据将能极大提升加工执行性能。

设置动态加工参数

动态加工参数是指从仪表板、报表、SuperPage等外部应用中传递参数值给不提取的数据加工来动态获取一个查询结果集。
有些特殊的场景下,需要在数据加工逻辑中提前使用动态参数过滤数据,比如加工的来源表数据量大需提前过滤优化性能、动态统计缓慢变化表中某个时点的数据。
通常情况下,查询条件比较简单时只需要在仪表板、报表、应用等引入的数据模型中设置过滤条件即可实现动态查询而不需要通过创建不提取的数据加工来传递动态参数,比如在企业信息自助查询 (opens new window)时根据选择的企业动态的传递企业ID值给钻取的企业一户式页面进行过滤,传递不同的企业ID便可以看到不同的企业一户式信息。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

输出加工结果

默认情况下,每个数据加工模型都会输出一个数据库表(通过加工流程图最后的模型输出节点),可以把这个输出的数据库表看成是一个数据仓库中的事实表或维表,加工输出的数据库表和数据加工是一一对应的,数据加工被报表或仪表板引用时其数据即来源于对应的数据库表。

输出虚拟的数据表
当有动态参数(可参考文档设置动态加工参数)或者需要查询实时数据时,可以不勾选提取数据。不提取数据时,数据加工可以看成一张的虚拟表,类似数据库中的视图,查询时直接执行加工逻辑的SQL语句。
在这里插入图片描述

提取到指定表

在模型输出节点下,选择数据面板>模型属性,勾选提取数据:
在这里插入图片描述
勾选后,出现的下拉框中默认会选中提取到指定表,即将加工数据提取到一个指定的数据库物理表中,具体设置介绍见模型属性-提取数据,该方式在提取数据时是最常见的,适用于先对来源数据进行清洗加工最后再输出加工结果数据的场景。

使用上游节点的表

通常数据加工过程都是先加工最后再输出数据的,此时采用提取到指定表方式即可,但是实际应用时有些特殊的场景下目标数据已经在前面的加工流程中落地到数据库表中了,而不希望在模型输出节点的属性上重新指定新的数据库表,则可以选择使用使用上游节点的表,主要对应如下几种使用场景:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1、清空旧数据并插入新数据
清空旧数据并插入新数据指的是根据设置的清空范围先删除目标表中的旧数据,再将当前加工结果数据全部插入。清空旧数据并插入新数据常用于能按照固定时间周期去增量更新目标表数据的场景,如日报表、月报表、年报表的数据提取。
在这里插入图片描述
2、按主键合并追加
按主键合并追加指的是将目标表和当前加工结果中主键相同的数据进行合并,再将当前加工结果中有而目标表中没有的数据追加至目标表中。
在这里插入图片描述
在这里插入图片描述
3、只追加
只追加指不对目标表数据做任何处理,直接将当前加工结果全部插入目标表。此方式适用于记录流水数据的场景,如将新产生的日志数据追加到日志表中。
在这里插入图片描述

缓慢变化数据提取

数据仓库中一般使用缓慢变化表来记录数据随着时间的流失发生的缓慢变化过程,加工模型支持直接使用当前快照数据更新缓慢变化表的提取方式,即插入缓慢变化数据并自动更新起止时间。
在这里插入图片描述
在这里插入图片描述
写在最后,关于数据的日常刷新:
在这里插入图片描述

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值