首页 > 解决方案 > Streamsets Data Collector CDC 可以读取和写入多个表吗?

问题描述

我有一个 MSSQL 数据库,其结构通过 Postgres 数据库复制。我在 MSSQL 中启用了 CDC,并在 StreamSets Data Collector 中使用了 SQL Server CDC 客户端来监听该数据库表中的更改。

但我找不到在 Postgres 中写入相同表的方法。

例如,我在 MSSQL 中有 3 个表:tableA、tableB、tableC。我在 Postgres 中有相同的表。我将数据插入到 tableA 和 tableC 中。我希望通过 Postgres 复制这些更改。

在 StreamSets DC 中,为了写入 Postgres,我使用 JDBC Producer 并在我指定的表名称字段中:${record:attributes('jdbc.tables')}。

执行此操作,将从 tableA_CT、tableB_CT、tableC_CT 中读取数据。启用 CDC 选项时由 MSSQL 创建的表。所以我将在 ${record:attribute('jdbc.tables')} 中得到这些表名。

有没有办法在与 MSSQL 相同的表中写入 Postgres?

标签: databasecdcdata-collectionstreamsets

解决方案


您可以使用具有以下标头属性表达式的表达式评估器来删除属性的_CT后缀:jdbc.tables

${str:isNullOrEmpty(record:attribute('jdbc.tables')) ? '' : 
  str:substring(record:attribute('jdbc.tables'), 0, 
    str:length(record:attribute('jdbc.tables')) - 3)}

注意 - 该str:isNullOrEmpty测试是SDC-9269的解决方法。


推荐阅读