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