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

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

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

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

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

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

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


person bsd    schedule 22.06.2018    source источник


Ответы (1)


Вы можете убрать суффикс _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.

person metadaddy    schedule 25.06.2018
comment
Спасибо ! Я сделал это уже. Было интересно, есть ли более прямое решение. - person bsd; 27.06.2018
comment
Насколько мне известно, нет — суффикс _CT присутствует в данных, поступающих от SQL Server, поэтому мы передаем его дальше. - person metadaddy; 04.07.2018