1

我有一个 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?

4

1 回答 1

0

您可以使用具有以下标头属性表达式的表达式评估器来删除属性的_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的解决方法。

于 2018-06-25T21:39:55.740 回答