概述
回写是指通过系统提供的回写规则,将当前电子表格数据写入到指定的数据库中。
回写库、回写表:用于存储当前报表数据的目标数据库、数据表。
目前已知暂不支持回写的数据库类型有 hbase、impala、sparksql、hive、Kylin。 |
bytehouse数据库作为回写库注意事项: 1、需要配置回写的报表为bytehouse的分布式表,并且分布式表需要配置参数remote_table_is_ha_unique = 1,如:CREATE TABLE db.tablename ( xxx String , xxx String ) ENGINE = Distributed ( 'bytehouse', 'db', 'tablename' ) SETTINGS remote_table_is_ha_unique = 1 2、smartbi配置的主键必须和bytehouse配置的唯一键匹配,否则会导致执行删除语句失败 3、bytehouse数据库不支持文件字段类型,如BOLB 4、在smartbi中,smartbi只会执行插入语句,因此配置的主键本质上是失效的,因此无法实现以下效果: 1)更新某一条记录的唯一键:如:update table set id = ? where id=? |
操作流程
实现当前报表数据回写的完整操作流程如下:
实现原理
回写规则设置的主键实质上就是标志位或称为条件(即where部分),用于作为sql语句的查询条件。
设置电子表格和回写表字段的关联关系,在前端浏览时进行回写操作(修改数据、插入/删除数据)后,报表数据与回写表对应字段的数据进行比对:
1. 更新和插入
在“回写规则”>“回写方式设置”中可以切换不同的“更新和插入”方式。
具体关于各个选项的具体实现原理如下:
1.1. 执行更新和插入
① 通过点击“添加行”新增的数据,前端记录为“插入”操作,执行“insert”语句,如下:
当回写表为空时(即表中无数据),在报表中仍然会保留一行空白行。 这一行视为插入的新行,在其中填入内容不会执行更新操作。 |
② 当有数据进行变更,前端记录为“更新”操作,根据其主键的值作为查询条件去执行“update”语句,如下:
1.2. 只执行更新
前端不管是“插入”还是“更新”操作,都根据其主键的值作为查询条件去执行“update”语句;
如下:
1.3. 只执行插入
前端不管是“插入”还是“更新”操作,都是执行“insert”语句;
如下:
1.4. 强制先执行更新再执行插入
对每一个操作记录,都是默认先将设置的主键作为where条件去执行一次更新操作,满足更新的where语句则进行更新,不满足则执行插入操作
简单示例演示,现有回写表 test ,主键为“id”,表结构如下所示:
id | name | sex |
---|---|---|
1 | 李华 | 男 |
2 | 小明 | 男 |
3 | 小红 | 女 |
在报表前端做以下操作:
点击“添加行”新增数据:id=“4”,name="阿强",sex=“男”;
修改 id = 2 所在行数据的“name“,原始值为“小明”,现修改为“郝明”;
修改 id = 3 所在行数据的“name“,原始值为“小红”,现修改为“涂红”;
点击“保存”后,数据库层面的操作如下:
2. 删除
“删除”操作的具体实现原理:通过点击“删除行”删除的数据,前端记录为“删除”操作,根据其主键的值作为查询条件去执行“delete”语句;
注意:回写功能只支持“分组表”,不支持“Excel融合分析”、“清单表”。 |