Streamsets Data Collector CDC 可以读取和写入多个表吗?

问题描述 投票:0回答:2

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

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

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

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

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

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

database cdc data-collection streamsets
2个回答
0
投票

您可以使用

Expression Evaluator
Header Attribute Expression
来从 _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 的解决方法。


0
投票

以下表达式提供原始表名称

${record:attribute('jdbc.cdc.source_name')}

如果您正在寻找原始表模式名称,那么您可以使用

${record:attribute('jdbc.cdc.source_schema_name')} 
© www.soinside.com 2019 - 2024. All rights reserved.