Может ли Streamsets Data Collector CDC выполнять чтение и запись в несколько таблиц?

У меня есть база данных MSSQL, структура которой реплицируется в базу данных Postgres. Я включил CDC в MSSQL и использовал клиента CDC SQL Server в StreamSets Data Collector для прослушивания изменений в таблицах этого БД.

Но я не могу найти способ писать в те же таблицы в Postgres.

Например, у меня есть 3 таблицы в MSSQL: tableA, tableB, tableC. Те же таблицы у меня есть в Postgres. Я вставляю данные в таблицу A и таблицу C. Я хочу, чтобы эти изменения были перенесены на Postgres.

В DC ​​StreamSets для записи в Postgres я использую JDBC Producer, а в поле "Имя таблицы" я указал: ${record:attribute ('jdbc.tables')}.

При этом данные будут считаны из таблиц A_CT, tableB_CT, tableC_CT. Таблицы, созданные MSSQL при включении опции CDC. В итоге я получу имена этих таблиц в атрибуте $ {record: ('jdbc.tables')}.

Есть ли способ писать в Postgres в тех же таблицах, что и в MSSQL?

1 ответ

Решение

Вы можете сократить _CT суффикс от jdbc.tables Атрибут с использованием Expression Evaluator с выражением атрибута заголовка:

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

Обратите внимание str:isNullOrEmpty Тест является обходным решением для SDC-9269.

Другие вопросы по тегам