点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我正在执行从IQ 15.4到IQ 16.1 sp02 pl04的数据迁移。
在我的IQ 15表中,ROWID是完全顺序的,即行计数与max(rowid)始终匹配。
将数据迁移到我的IQ 16.1表时,即使两个系统上的行数都匹配,ROWID也不会连续,并且行数与max(rowid)不匹配。 此外,当行数超过一定数量时,IQ 16.1中的行标识符分配总是存在巨大的缺口-为什么会发生这种情况?
为什么上述IQ引擎之间的行为差异对我们很重要? 使用哈希md5函数(在IQ 15表和IQ 16表之间)执行数据验证比较时,我得到的校验和值不匹配。 这是因为IQ 16表上的ROWID包含巨大的空白,并且由于为行分配了不同的rowid,这些行值的顺序已更改,因此(有序与无序)值列表上的校验和很明显 不匹配。
我可以了解内部rowid是否不同,但这会影响IQ 16表中行的顺序,其中没有主键或已定义的顺序,因此我不能依靠md5哈希函数来验证数据 比较目的。
任何帮助或想法,将不胜感激。
此致
Asif。
嗨,柯比,
我了解您对为何IQ 16中的ROWID不是连续的但在IQ 15.x中找不到此行为的解释。
此外,ROWID确定了数据的内部顺序,我需要在源(IQ 15)和目标(IQ 16)之间使此顺序相同。 LIMIT子句实际上是通过利用单个线程来执行加载来强制加载引擎维持相同的顺序。
我已经进行了一些性能测试,并且对性能没有太大影响,因此我将LIMIT子句添加到我的加载脚本中。
感谢您的帮助。
Asif。
在SAP Sybase IQ 15和SAP IQ 16之间,ROWID的行为没有改变,但是并行性在许多方面都有所提高。
您现在可能会看到在大多数情况下通过使用并行插入实现的速度提高的结果。 SAP Sybase IQ 15使用并行性少得多,因此ROWID更有可能是顺序的。
使用LIMIT子句是强制单线程负载的好方法,但是会牺牲很多性能,尤其是对于较大的负载。
我强烈建议您不要依赖行顺序。 没有DBMS可以保证排序查询之外的行顺序。 SAP Sybase 15的顺序ROWID是一个偶然的副作用,而不是功能。
嗨,Asif,
如果没有ORDER BY子句,则SAP IQ无法保证查询输出或表中的行顺序。
有几个原因导致ROWID不能连续出现并且存在间隙,但是最有可能是并行数据插入。 SAP IQ将为每个线程分配一个ROWID块,因此不会发生冲突。 这样可以更快地插入表中。
ROWID不能用作主键或特定数据标识符,也不保证它是顺序的或无间隙的,并且将特定的ROWID与特定的数据行匹配不应成为数据的一部分 完整性检查。
-Kirby
OK-因此,在IQ 16的LOAD TABLE语句中使用LIMIT子句会导致引擎以相同顺序加载行并防止ROWID中出现间隙 。
此致
Asif。
一周热门 更多>