Может ли 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.