页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

完全兼容的前置条件

1、迁移前后的数据库都是Smartbi产品支持的数据库类型。

2、数据库的字符集一致,或者新的数据库在新的字符集下不乱码。

3、迁移前后的数据库名称、表名、字段名完全一致(包括大小写)。

4、迁移前后数据库的Schema/Catalog名称及支持完全一致。

5、迁移前后表字段的数据类型、数值字段的精度完全一致。

6、有在产品中使用存储过程的,存储过程的名称,参数,和返回结果完全一致。

7、有在产品中使用分区字段的,迁移后需要有相同的分区字段设置。


...

业务库迁移兼容可能遇到的问题以及解决方案

序号问题分类兼容性问题说明可能影响效果

迁移场景(源库——》目标库)

影响范围

数据源(表、字段)

Smartbi产品兼容处理方案建议解决方案
1命名与大小写问题不同数据库对表名、列名等的大小写区分规则不同,迁移前后大小写规则可能变化查询失败、BI图表报错源库——》目标库大小写规则不一致1、数据源(表、字段)

自动兼容统一命名规范,使用小写并避免保留字;如需保留大小写,建议统一使用双引号或数据库特定设置。
2、拖动生成的数据集、计算字段等:手写sql(数据源下的业务视图(sql查询)、原生sql查询、sql查询、模型中的sql查询、所有数据集及报表中直接写的计算字段(计算列、计算度量、分组字段))手动兼容手工调整成目标业务库的大小写规则
源库——》目标库大小写规则一致自动兼容
2SQL语法差异不同数据库的 SQL 语法有差别,比如分页(LIMIT vs TOP)、子查询支持程度不同手写SQL失效,BI图表报错

源库——》目标库的SQL语法有差异

1、数据源(表、字段)
2、拖动生成的数据集、计算字段等:xx
自动兼容避免手写SQL,优先使用BI工具生成的兼容SQL,或在迁移过程中进行SQL重构与适配。
手写sql(数据源下的业务视图(sql查询)、原生sql查询、sql查询、模型中的sql查询、所有数据集及报表中直接写的计算字段(计算列、计算度量、分组字段))手动兼容手工调整成目标业务库的语法
3函数不一致不同数据库的函数名或语法不同(如 NVL、IFNULL、COALESCE)指标计算错误、查询失败,BI图表报错源库——》目标库的函数不一致1、数据源(表、字段)
2、拖动生成的数据集、计算字段等:xx
自动兼容抽象封装公共函数或使用BI平台提供的函数映射功能;复杂逻辑建议使用统一的计算层。
手写sql(数据源下的业务视图(sql查询)、原生sql查询、sql查询、模型中的sql查询、所有数据集及报表中直接写的计算字段(计算列、计算度量、分组字段))手动兼容手工调整成目标业务库对应的函数
4Catalog 和 Schema 支持差异一些数据库只有 database,无 schema;有些同时有 catalog 和 schema表找不到、权限错误、SQL报错源库——》目标库的catalog、Schema 一致直接修改数据源连接自动兼容在迁移前设计好 Schema/Catalog 映射策略;BI中使用动态变量配置 schema/catalog 前缀。
源库——》目标库的catalog、Schema 不一致
手工兼容

需通过 ID 规则统一大小写(如 UPPER_CATALOG 规则,详细查看:业务库迁移之后ID替换操作)。

5分区与分布机制一些数据库支持分区表而目标数据库不支持查询效率降低源库有分区表设置——》目标库无分区表设置数据库表分区字段设置不兼容

无法兼容,之前设置的分区字段不生效

数据迁移后重新设计分区策略,或使用分布式中间件(如Doris、StarRocks等)适配分析场景。

6编码/字符集问题源数据库和目标数据库字符集不同,可能导致中文乱码文本乱码,查询结果错误源库—》目标库,编码/字符集不同
手动兼容迁移前统一字符集编码(如UTF-8);采用ETL工具进行字符转换并校验。
7NULL处理差异某些数据库不允许空字符串作为NULL,或者布尔字段处理不一致逻辑判断出错源库—》目标库,NULL处理差异回写、excel导入、指标模型创建表手动兼容ETL中明确NULL与空值的处理规则;统一布尔字段值的处理方式(如0/1或TRUE/FALSE)。
8数据精度问题数值字段在不同数据库中精度定义不一致(如浮点型精度丢失)数据计算结果不准源库—》目标库,数据精度不一致
手动兼容明确字段精度范围,在迁移脚本中定义精度转换;关键字段建议使用字符串或DECIMAL类型保存。
9事务隔离级别与锁机制差异数据库事务隔离机制不同(如Snapshot、Serializable),锁粒度不一致并发异常、数据脏读源库—》目标库,数据库事务隔离机制不同
手动兼容避免在BI中使用事务;使用ETL调度平台时明确隔离级别,尽量避免行级锁冲突。
10执行计划优化器差异不同数据库的执行计划优化器行为不同(如JOIN顺序、并行策略)查询变慢、索引失效源库—》目标库的执行计划优化器行为不同
手动兼容避免强依赖某一数据库的执行计划逻辑;关键SQL可手动优化,或写入提示(hint)适配。
11跨库引用与远程表支持部分数据库支持dblink/FDW远程表,部分不支持查询失败源库—》目标库,
手动兼容使用数据同步中间层;或将所有依赖表迁移至同一数据库。
12数据库对象名长度限制不同数据库对表名、字段名长度有限制(如 Oracle 30 字符)无法创建表,BI建模失败源库—》目标库 表名、字段名长度有限制不一样
手动兼容统一命名规范,限制对象名长度 ≤ 30;可使用简写或别名方式规避。
13数据类型不兼容同一数据在不同数据库中数据类型不同(如 TEXT vs CLOB,BOOLEAN vs CHAR(1))导入/导出失败,BI报错源库—》目标库 数据类型不同
手动兼容在ETL/数据同步前统一数据类型映射规则,使用中间层或数据建模工具进行类型转换。

4

...

业务库迁移兼容具体操作示例

4.1 源库与目标库信息完全一致的迁移

适用情况

  • 同类型数据库迁移(如 Oracle→Oracle、MySQL→MySQL)。

  • 仅更换服务器地址 / 端口,数据库结构(Schema、Catalog、表名)完全不变

...