1 背景
1、数据源管理添加表:
目前schema节点、表字段的ID会记录添加表时数据库对应的catalog、schema;目前产品有2种规则,一种是新规则做了多catalog,以及之前没有实现多catalog。
以表的ID为例构成为:
- 有多catalog的新资源:TAB.数据源名.catalog.schema.表名
- 没有多catalog的旧资源:TAB.数据源名.schema.表名
2、数据连接修改变更为其他类型的数据库,或者本身数据库的catalog、schema发生了改变,已有的报表取数会找不到表;数据库管理重新添加表后,因为catalog、schema变更,会导致新添加的表和字段ID也会相应变更,已有的报表使用的还是之前的ID,会报错找不到对象。
2 操作步骤
2.1 知识库添加资源对象的ID转换规则
以:源库为mysql,目标业务库为postgresql 为迁移示例进行说明。
1、需要先在数据连接
使用第三方工具连接知识库,对规则表t_schema_idrule插入规则,示例SQL:
INSERT INTO .t_schema_idrule (c_id,c_schemaid,c_dataSourcename,c_origcatalog,c_origschema,c_catalog,c_schema,c_rule) VALUES ('I8a8a9f5a0192bf79bf7978dc0192c19e76550121','SCHEMA.northwind.null','northwind',NULL,NULL,'northwind_for_compatibility','public','ORIGINAL_NO_CATALOG'),
设定说明:
资源树数据连接下一个schema节点对应只能插入一条
t_schema_idrule,具体表结构如下:
字段名 | 说明 |
c_id | uuid 随机生成,保证是表主键唯一即可,如:I8a8a9f5a0192bf79bf7978dc0000000000000001 |
c_schemaid | 对应数据连接下面schema的资源树节点ID,可右键查看节点id属性获取 |
c_dataSourcename | 数据源name,可右键数据连接资源查看节点名称属性获取 |
c_origcatalog | 原库的catalog,见原库设定说明 |
c_origschema | 原库的schema,见原库设定说明 |
c_catalog | 当前数据源的catalog,见当前库设定说明 |
c_schema | 当前数据源的schema,见当前库设定说明 |
c_rule | 产品内置6种规则,见规则说明 |
原库设定说明
右键数据连接下面schema的资源树节点,可右键查看节点id属性判断,ID组成有2种情况:
新资源ID的构成为
SCHEMA.数据源名.catalog.schema
如
SCHEMA.northwind.catalog.schema 对应 c_origcatalog:catalog c_origschema:schema
SCHEMA.northwind.null.schema 对应 c_origcatalog:null c_origschema:schema
SCHEMA.northwind.catalog.null 对应 c_origcatalog:catalog c_origschema:null
旧资源默认catalog下的ID构成为
SCHEMA.数据源名.schema
如
SCHEMA.northwind.schema 对应 c_origcatalog:null c_origschema:schema
SCHEMA.northwind.null 对应 c_origcatalog:null c_origschema:null
当前库设定说明
可以打开数据库管理界面,可以查看当前数据库的catalog、schema对象,根据数据库切换前后的实际数据库结构选择catalog、schema设置
通常数据库管理界面后默认选中的catalog、schema就是默认值
部分数据库不支持schema和catalog,需要设置为:null
规则说明:
规则不拼catalog时,适用旧资源默认catalog下的schema ID资源,构成为SCHEMA.数据源名.schema
名称留原值、变大写、变小写,如:
ORIGINAL_NO_CATALOG:保留原值,如字段id=FIELD + .数据源名称 + .origschema + .表名 +. 字段名
UPPER_NO_CATALOG:转大写,如字段id=FIELD + .数据源名称 + .origschema + .toUpper(表名) +. toUpper(字段名)
LOWER_NO_CATALOG:转小写,如字段id=FIELD + .数据源名称+ + .origschema + .toLower(表名) +. toLower(字段名)
规则拼catalog时,使用于新资源schema ID下的资源,构成为SCHEMA.数据源名.catalog.schema
名称留原值、变大写、变小写,如:
ORIGINAL_CATALOG:保留原值,如字段id=FIELD + .数据源名称+.origcatalog + .origschema + .表名 +. 字段名
UPPER_CATALOG:转大写,如字段id=FIELD + .数据源名称+.origcatalog + .origschema + .toUpper(表名) +. toUpper(字段名)
LOWER_CATALOG:转小写,如字段id=FIELD + .数据源名称+.origcatalog + .origschema + .toLower(表名) +. toLower(字段名)
不支持的情况及注意事项说明
旧资源同一schema下存在多个不同的catalog,只能选中一个进行替换处理,无法同时支持多个
历史旧ID资源所有的catalog为null,产品支持catalog后,有部分表数据库管理移除保存后又重新加入,catalog会更新为实际值,这样就会出现旧资源多个catalog的情况
检查方式:可以通过下面sql语句查看:
select distinct c_catalog from t_basictable where c_datasrcid = 'DS.northwind' and c_schema = "schema名称"
数据模型、自助数据集移除表(表是切换数据库后重新添加的),重新添加表后会丢失原ID
数据模型、自助数据集移除表,重新添加表操作,因为表是切换数据库后重新添加的,会使用实际catalog、schema参与资源字段ID,会发生变化,导致关联的报表报找不对象的问题
数据集同步表影响
数据模型只是进行同步表操作,不影响正常使用
自助数据集同步表,操作等同于重新添加表,如果同步的表是切换数据库后重新添加的,会引起找不到对象的问题
缓存可能会影响使用,切换数据库和id后建议系统清除缓存
可视化等数据集,默认是自动缓存的,修改了数据库类型,需要清除缓存(清除时需确保数据集不是打开状态),数据集设置了禁用缓存不受影响
其他不支持
sql数据集、参数等用户使用手写SQL部分无法支持
只支持名称统一转为大小写,同时包含大小写的情况,目前暂不支持
后续会考虑添加新增替换规则的界面,替换粒度细分到表等,完成时间待定,分步支持情况