0

我已经获得了从 DB2LUW 到 Microsoft SQL Server 的 Infosphere CDC 环境。

因为我们有磁盘空间问题,我们需要过滤复制;选定的数据将按日期列复制。

源表插入方式为APPEND,很少更新。在创建订阅过滤选项卡期间,当我运行验证按钮时,它会返回如下所示的错误。

BUSINESS_DATE column data type is TIMESTAMP(0).
Error message details :
cannot parse expression : BUSINESS_DATE > '2017-12-18 00:00:00.0"
Cannot return as a date

我已经阅读了文档,但我无法理解它,并且没有满足我的场景的示例表达式。我不确定为什么 CDC 无法使用时间戳数据类型列执行过滤。

当我尝试将我的时间戳列转换为 char 格式时,CDC 发现它是有效的:

%TOCHARFORMAT(BUSINESS_DATE,'yyyy.MM.dd HH:mm:ss') > '2017.12.18 00:00:00'
%TOCHARFORMAT(BUSINESS_DATE,'yyyyMMdd') > '20171218'

由于我没有任何开发环境,因此我没有足够的信心运行它。

我预计会出现一些性能问题,因为 (business_date) 的每一行都需要首先转换,然后再与过滤条件进行比较。

最后,我的表映射被另一列(bigint 数据类型)过滤。我只是很好奇为什么刷新过程似乎没有使用任何索引来过滤行(CDC在源数据库中运行的查询没有使用任何过滤器),尽管它有助于加速刷新,因为不是每个数据都会需要插入到目标表中。

CDC 可以使用时间戳数据类型列执行过滤吗?有什么建议么?

4

1 回答 1

1

我认为您的原始过滤器表达式的问题在于文字被评估为字符数据类型。我想你不能通过做一些转换来在不同的数据类型之间进行比较。

关于刷新,CDC 总是执行全表扫描。我想原因是行过滤可能包括任何类型的 SQL where 子句都不能支持的测试,包括用户出口和日志控制列,因为当它抓取事务日志时,它没有使用由数据库,因此这避免了刷新和镜像中的过滤逻辑之间不匹配的任何问题,如果刷新使用数据库过滤器并且镜像使用本机过滤器,则可能发生这种情况。

于 2019-11-13T20:05:16.880 回答