Scriptella — скрипт DB to DB ETL, который использует строки из вывода для заполнения новой таблицы

Мне нужно разработать сценарий ETL (который запускается после другого), который считывает строки из одной базы данных (DB1) и копирует их в другую (DB2).

Проблема в том, что запрос, который выбирает строки из DB1, объединяется со строками в DB2, примерно так:

SELECT db2.tableA.columnA, db1.tableA.columnA
    FROM db2.tableA
    LEFT OUTER JOIN db1.tableA
    ON db1.tableA.columnB = db2.tableA.columnB

У меня возникли проблемы с решением этой проблемы, так как тег запроса получает один идентификатор соединения.

Спасибо!


person user3216437    schedule 20.01.2014    source источник


Ответы (1)


Мне трудно судить о бизнес-цели конкретного соединения, но я считаю, что с точки зрения реализации проще всего создать временную таблицу в db2, которая является копией db1.tableA. Пример:

<connection id="db1" ....>
<connection id="db2" ....>

<script connection-id="db2">
    CREATE TABLE tableAFromDb1 (
           ....
    );
</script>
<query connection-id="db1">
   <!-- Copy all rows from db1 to db2 -->
   SELECT columnA, columnB FROM db1.tableA
   <script connection-id="db2">
        INSERT INTO db2.tableAFromDb1 (columnA, columnB) VALUES (?1, ?2);
   <script>
</query>
<!-- Produce the outer join if necessary or directly manipulate the tableAFromDb1 dataset --    >
<query connection-id="db2">
    SELECT columnA, columnA
        FROM tableA LEFT OUTER JOIN
        tableAFromDb1 ON tableAFromDb1.columnB = tableA.columnB

    <script>
       TODO Insert the result somewhere
    </script>
</query>
person ejboy    schedule 21.01.2014