# 模型属性
模型设置中可以设置模型的主键、数据期、提取设置、查询设置等,主要分为基本、提取、查询、高级四个方面的属性设置。
# 基本
# 主键
主键由一个或多个字段组成,用来唯一标识一行数据,也常用于模型之间的关联,通常每个模型必须设置主键。同时系统可依据模型主键的设置自动识别数据集类型。
当模型具有目标数据库表的写权限或修改表结构权限时,设置的主键会在数据库物理表中创建主键约束,否则,主键只作为模型的逻辑属性。
通常,手动创建的空白模型或数据加工模型在保存时默认都会在数据库物理表上自动创建主键约束,而从外部第三方数据库导入的模型默认是直接读取物理表中的主键信息。
提示
# 业务键
由一个或多个具有实际业务意义的属性组成,和主键一样,可以唯一标识一行数据。主键对应数据库物理表中的主键约束,通常是一个技术性ID,采用MD5、序列号等生成,比如员工ID,而业务键是具有实际业务含义的字段,比如员工工号或员工身份证号。
工作流中只能使用一个字段进行业务表之间的关联,当模型主键有多个字段时,此时需要设置一个业务键。
# 数据期类型
数据期类型用来表示模型的分类,可以帮助系统更准确的判断模型的使用方式和应用场景,系统也能根据模型类型自动进行一些逻辑处理,比如可以自动根据周期快照模型的数据期字段进行同比、环比的计算。
- 周期快照
表示数据表有确定规律的周期粒度,如年、年季、年月、日期等,选择该类型后,需要在数据期字段中指定存储数据周期的字段,如按照年月汇总的门店月销汇总表 (opens new window)
- 缓慢变化
当数据修改不定期、需要记录历史并随时查询到历史时刻的全量数据、还想尽量节省数据库的存储空间时,可以选择缓慢变化类型。
缓慢变化类型需要先在模型中定义起止时间字段来标记数据的发生时间区间,并需要将起止时间字段分别设置为缓慢变化起和缓慢变化止,如记录企业变化信息的企业基本信息缓慢变化表 (opens new window)
提示
当数据加工模型设置数据期类型为缓慢变化时,可以选择提取方式为插入缓慢变化数据并自动更新起止时间。
- 无
默认值,其他不明确的类型都可以设置为无,通常是维表、加工中的临时表等
# 数据期字段
数据期类型选择为周期快照时必填,指定周期快照表中存储周期粒度的字段,通常是日期或时间戳类型的字段,也可以是设置为日期角色的字符型字段。
# 缓慢变化起
数据期类型选择为缓慢变化时必填,指定缓慢变化中数据的起始时间的字段,通常是日期或时间戳类型的字段,也可以是设置为日期角色的字符型字段。
# 缓慢变化止
数据期类型选择为缓慢变化时必填,指定缓慢变化中数据的截止时间的字段,通常是日期或时间戳类型的字段,也可以是设置为日期角色的字符型字段。
# 记录变化
数据期类型选择为缓慢变化时必填,记录变化用来设置哪些字段将被纳入缓慢变化中,只有纳入缓慢变化中的字段发生了修改,才会被认定数据发生缓慢变化。
记录变化可以选择如下方式中选择一种:
- 所有字段的变化,默认值
- 指定字段的变化
- 忽略指定字段的变化
# 最后修改时间
指定一个日期型或时间戳类型字段,用来标识数据行的最后修改时间,主要应用在如下场景:
- 在表单提交数据修改时系统自动修改最后修改时间字段的值,不需要表单专门提交这个字段。
- 有些增量数据提取的场景也会使用此字段进行增量的数据提取,比如按主键合并数据时,可以指定最后修改时间字段作为增量依据字段实现增量的合并追加。
# 最后修改人
指定一个字段,用来标识数据行的最后修改人,主要用于在表单提交数据修改时系统自动修改最后修改人字段的值,不需要表单专门提交这个字段。
# 只读数据
只读数据用于APP模型控制SuccBI对数据的使用方式和安全性,通常导入的第三方已存在的数据模型默认设置为只读,而系统内部自建的业务应用类的数据模型默认是读写的。
勾选时,不允许修改数据库物理表的结构及数据。
# 数据源标识字段
Elasticsearch模型特有的属性,Elasticsearch模型支持添加多个来源模型,并可以对每个来源模型设置一个来源标识,这些来源标识的值便存储在此属性指定的数据源标识字段
中,用来区分目标表中数据行的来源。
# 数据校验结果标识
指定记录数据校验结果的字段,当数据行满足所有校验规则时为1,否则为0。
常用于在应用中批量导入Excel等数据时记录导入数据的校验结果情况,例如:批量导入人员采样信息 (opens new window)时,可以先将所有数据导入到人员采样信息-临时表 (opens new window)中,在临时表中记录导入数据的校验结果,并选择把校验成功的数据复制到最终的人员采样信息表中。
# 数据校验问题描述
指定记录数据校验问题描述的字段,当数据行不满足校验规则时,记录其问题描述,必须为clob类型。多个问题描述使用分号;
隔开。
应用场景与数据校验结果标识相同。
# 数据校验规则ID
指定记录数据校验规则id的字段,当数据行不满足校验规则时,记录其规则id,必须为clob类型。多个问题描述使用分号;
隔开。
应用场景与数据校验结果标识相同。
# 提取
仅数据加工模型有提取属性。
# 提取数据
新建数据加工时,默认勾选,通常用于数据仓库系统中将来源业务库的表加工后提取到目标数据库中时设置。
勾选时,其后的下拉框有两个选项:
- 提取到指定表:默认选项,表示把数据提取到目标数据库表中指定的表中。
- 使用上游节点的表:选择该选项时通常是目标数据已经在前面的加工流程中落地到数据库表中了,而不希望模型属性上重新生成新的数据库表,详细使用见使用上游节点表机制,选择该选项后,系统会自动将前序节点传过来的数据库表设置为目标数据库表,且不可修改。
不勾选时,数据加工是一个虚拟模型,详见输出虚拟的数据表,用于需要查询模型实时数据的场景。
# 目标数据库表
提取数据时的目标数据库物理表按照如下几种方式确定:
- 如果不关心模型的物理层信息,可以不用手动指定,在保存模型时,系统将自动生成。
- 如果需要给目标数据库表指定表名时,可以点击选择按钮,并点击对话框中左下角的创建数据库按钮输入表名。
- 如果需要把数据提取到一个已存在的数据库物理表中时,可以点击选择按钮,手动选中一个已存在的数据库表。
另外,与数据加工模型不同的是,APP模型中该属性是在基本属性分类下。
# 允许修改表结构
用来控制数据加工对目标数据库表结构的操作限制,这里的数据库表结构信息指的是字段、索引、约束。
- 字段:表示数据库表的字段结构信息
- 索引:表示数据库表的索引信息
- 约束:表示数据库表的主键信息
通常当数据加工将数据提取到指定的第三方数据库表时,默认不允许SuccBI修改表的结构信息,防止对第三方数据库表结构的误修改。
# 提取方式
设置数据加工以哪种方式把数据提取到目标数据库表中,系统提供了五种提取方式:
# 重建表
提取时创建新的数据库表,并通过交换表名的方式替换原表,替换过程中原数据库表会被短暂的删除,所以只适合用于在业务运行时间窗口之外小数据量表的快速全量数据更新。
提示
重建表后原来的旧表及数据不会立即删除,会自动保留一段时间。
# 全量覆盖
默认的提取方式,先清空目标数据库表的数据,再插入加工结果数据,适合小数据量表的全量更新。
与重新建不同的是,全量覆盖不会删除表,在有些环境下出于安全的考虑不允许执行删除表操作或者没有删除权限时,可以选择全量覆盖替代重新建来执行全量提取。
另外,全量覆盖方式下可以通过勾选重建索引和主键来提高提取性能。
# 清空旧数据并插入新数据
根据设置的清空范围先删除目标表中的旧数据,再将当前加工结果数据全部插入,是一种增量提取数据的方式。清空旧数据并插入新数据常用于能按照固定时间周期去增量更新目标表数据的场景,如服饰销售日报表、月报表、年报表的数据提取。
# 按主键合并追加
按主键合并追加指的是将目标表和当前加工结果中主键相同的数据进行合并,再将当前加工结果中有而目标表中没有的数据追加至目标表中。
主要用于如下场景:
- 当对大表需要进行增量更新,但又没法确定明确的增量范围时,适合使用按主键合并追加进行增量更新。
- 只想把来源数据中有而目标表中没有的数据追加到目标表。
按主键合并追加可以通过设置增量依据字段来实现增量合并追加。
# 只追加
只追加是指不对目标表数据做任何处理,直接将当前加工结果全部插入到目标表中。和按主键合并追加一样,可以通过设置增量依据字段来实现增量追加,通常用于增量将流水日志等信息提取到目标表。只追加模式下主键一般是使用UUID等函数自动生成。
# 插入缓慢变化数据并自动更新起止时间
插入缓慢变化数据并自动更新起止时间是针对数据期类型为缓慢变化的模型特定的增量提取方式,系统通过比对当前数据与目标数据库表中的数据差异,然后分别进行新增、删除、修改操作,主要用于记录来源数据的历史变化信息,比如对来源数据为企业信息表执行插入缓慢变化数据并自动更新起止时间方式的提取,会在目标表中记录下企业信息的变化数据。
提示
比对数据差异时,只比对记录变化中设置的字段差异。
- 新增:当前来源数据中,目标数据库表中没有的,则作为新增数据追加到目标表中,并更新缓慢变化设置的缓慢变化起和缓慢变化止字段。
- 删除:当前来源数据中没有的,而目标数据库表中有的,则数据被认为是删除了,在目标数据库表中修改对应数据的缓慢变化止字段的值为
当前日期-1
。 - 修改:当前来源数据和目标数据库表中均有的且发现有差异的,则认为数据是被修改过了,将差异更新到目标数据库表中。
提示
- 清空旧数据并插入新数据、按主键合并追加、只追加三种增量提取方式具体的实践过程参见增量数据提取。
- 插入缓慢变化数据并自动更新起止时间提取方式的实践过程参见缓慢变化数据提取
# 清空范围
在提取方式为清空旧数据并插入新数据时必须设置一个或多个条件,数据提取时会先按照清空范围的条件删除目标数据库表的旧数据再插入新数据。
# 支持回滚
默认不勾选,当支持回滚时,数据如果提取失败会恢复到提取前的状态,不支持回滚可以带来更好的提取性能,但在提取过程中目标数据库表的数据可能会被清空或出现抖动,同时如果提取失败则可能丢失数据。
数据仓库系统的模型加工中通常不建议勾选该选项,大数据量下会导致严重的性能问题。必要情况下,仅应用于核心的、小数据量表的数据提取中。
# 重建索引和主键
仅用于提取方式为全量覆盖时,系统通过先删除表中索引和主键,待提取完成后,再创建的方式来提升数据提取的整体性能,默认勾选。
勾选时,系统会自动校验允许修改表结构是否勾选了索引和约束,若没有勾选,属性框下会有异常提示。
在提取方式为全量覆盖模式下,通常都会勾选,当数据源中没有修改数据库表索引和约束的权限时,则需要去掉勾选才能正常提取数据。
# 增量依据字段
可设置一个增量依据字段,通常是一个自增长字段或数据创建时间字段(如交易时间),系统将先计算出目标表中增量依据字段的最大值,并在当前加工结果中过滤大于该最大值的数据,以实现只提取上一次提取后有增加的数据,不选择时将提取所有数据并追加到目标表。
例如,从电子商务业务数据库中同步交易订单数据到数据仓库时,可以设置增量依据字段为【交易时间】,数据提取时先计算出目标数据库表中的最大的交易时间,插入数据时先对来源表进行过滤交易时间>=最大的交易时间
。
# 更新已有数据
用于按主键合并追加提取方式下设置合并策略,默认不勾选,当你需要对已存在的旧数据更新时需要勾选。
勾选后,合并更新时会更新除更新忽略字段列表选项勾选之外的所有字段。
# 更新忽略字段列表
提取方式为按主键合并追加且勾选了更新已有数据时,用来设置需要忽略更新的字段,默认更新全部字段。
通常用于合并更新时保留数据第一次插入到表中的某些字段信息,比如数据推送场景下,通常模型中会使用【插入时间】字段记录数据行的首次入库时间,在之后的增量推送过程中,只会更新数据行的其他业务字段,而不会修改【插入时间】字段。
# 定时调度
用于需要定时更新模型数据的场景,如数据仓库系统中,通常需要在每天晚上定时更新模型中的数据。定时调度可以给数据加工设置一个或多个计划调度,在计划运行时可自动执行数据加工提取,详细请参考调度管理。
# 依赖
在定时调度中指定了计划调度后,可选择一个或多个数据加工作为依赖模型。
通常该选项不需要设置,系统会自动分析依赖关系,只有在如下几种特殊情况下才需要手动设置:
- 添加到同一计划的数据加工存在循环引用,比如智能调度分析出的数据加工的引用关系为A依赖B、B依赖C、C依赖A,可手动设置A依赖C化解循环引用。
- 有些使用脚本、SQL等方式的数据加工,系统不能自动识别依赖关系,需要手动设置。
设置后,当计划在执行时,加工将在指定的依赖模型执行完成后才开始提取数据。
# 查询
# 排序字段
模型被查询时,设置其返回结果的默认排序规则,可添加一个或多个排序字段并指定排序方式。通常用于需要按照某种顺序显示数据的场景,比如提交请假申请单后显示的请假单列表通常应该按照【请假申请时间】倒序显示,最新申请的显示在最上面。
示例:课程分类管理 (opens new window)、课程分类模型表 (opens new window)
当应用页面中也设置了排序方式时,比如在数据集中指定排序字段、在仪表板中指定排序,则此处设置的排序方式将会被覆盖。
# 禁用模型缓存
创建数据加工模型时默认启用模型缓存,创建APP模型时默认不启用。
当多次或并发查询某个相同模型或页面的数据时,如果模型数据没有发生过变化,使用模型缓存可以避免系统向数据库重复发起相同的查询,而是直接从上一次的查询结果缓存文件中加载数据,可以用来提升系统的并发查询性能和吞吐量。
启用模型缓存适用于数据更新频次低的应用,例如数据仓库模型通常都是按日进行定期更新的,所以数据仓库模型非常适合使用模型缓存;而对于高并发的业务应用,则通常只应该对维表或字典表启用模型缓存,而频繁更新的业务表则必须禁用模型缓存!
警告
频繁更新的业务表为何要禁用模型缓存?业务表发生数据更新时,为了确保查询时数据的一致性,缓存文件会被标记为过期状态,而频繁更新业务表会导致系统陷入缓存文件过期、重新生成缓存文件、缓存文件再次过期的循环中,严重降低系统运行性能,在高并发下甚至可能导致系统瘫痪。
在系统内部进行的模型数据修改,如重新提取数据、使用表单修改数据,系统能自动侦测并使模型缓存文件过期,但如果使用的是第三方工具如PL/SQL Developer、Navicat等直接修改了表的数据,系统是不能侦测到数据变化的,此时必须在系统设置中清空Query缓存(可参考文档:缓存管理)或在此处勾选禁用模型缓存来直接向数据库查询最新的数据,否则会导致查询数据不一致。
# 过滤条件
模型表的全局过滤条件,当对模型进行加工或分析查询时,始终会带上该过滤条件进行查询。通常用于直接连接业务库的实时查询分析中,例如大屏实时分析展示电商平台的成交订单情况时,会先导入电商业务库的订单表为模型并设置全局过滤条件过滤出有效订单数据。
# 默认抽样条件
当数据表数据量比较大时,为了避免在被其他加工引用时,因为一个简单的操作,导致查询速度非常缓慢,可以设置数据表的默认抽样条件。设置后,当模型被其他加工引用时,默认抽样条件会默认被设置为引用节点的预览数据集中的只查询指定条件。
如销售明细表记录了近20年上亿条数据,在对这个表进行加工时,数据查询速度很慢,可以先在销售明细表的模型属性 > 默认抽样条件中设置【销售年份】为2020
,预览数据时只查询2020年的数据,提升查询速度。
过滤条件和默认抽样条件的区别
- 过滤条件:过滤条件是模型的全局过滤条件,在任何地方查询模型时都会带上该过滤条件
- 默认抽样条件:默认抽样条件只在模型被其他数据加工引用且打开了预览数据时生效,作为预览数据时的默认过滤条件。
# 权限过滤字段
设置有效的级次权限过滤字段,通常用于如下场景:
当模型有多个字段关联了一个数据范围维度表,明确只用某个字段过滤权限。 如门店销售明细表 (opens new window)中有【导购员】和【收银员】2个字段都关联了数据范围维度表:
员工表
,希望登陆系统的员工只能查看自己的销售数据时,即需要过滤[导购员]=$user.id
,可以将【导购员】选择为权限过滤字段。当模型有多个字段关联了一个数据范围维度,希望用多个字段过滤权限。如发票表中有【销方税务机关】和【购方税务机关】2个字段都关联了数据范围维度表:
税务机关
,希望登陆系统的税务人员能看到与其所在税务机关相关的所有发票时,即需要过滤[销方税务机关]=$user.org OR [购方税务机关]=$user.org
,可以将【销方税务机关】和【购方税务机关】选择为权限过滤字段。
如果不选择,默认情况下系统将自动找到模型表中所有关联了数据范围维度的字段,并随机选择其中一个字段进行过滤。
提示
- 只有设置了关联表的字段才会出现在下拉选项中。
- 选择多个权限过滤字段时,多个字段的权限过滤条件为或关系。
# 高级
# 启用脚本
数据加工支持使用脚本个性化处理数据查询、数据更新、数据调度等逻辑,下拉框可选择:
- 不启用:默认值
- 前端脚本:仅APP模型才有该选项,运行在客户端
- 后端脚本:运行在服务端
关于前端脚本和后端脚本的详细介绍参见脚本模型。
# 指定脚本位置
在启用脚本中选择了前端或后端脚本的一种后,默认系统会自动将脚本存储到约定位置,使用者无需关心,可以勾选此选项来给脚本指定一个存储路径。另外,点击按钮定位到脚本位置可跳转到对应的脚本资源界面。
# 隐藏流程图
仅数据加工有该选项,表示隐藏数据加工流程图,默认不勾选。
# 模型扩展属性
除了上述的基本属性外,系统还提供了具备一定的扩展能力的自定义属性,当用户需要按照自己的需求给模型添加其他的属性时,可以设置模型的自定义属性,如添加一个属性模型业务描述,以便知道模型的具体业务意义,具体步骤可参考文档:如何设置模型的自定义属性。