Я пишу работу ETL, в C #, используя Rhino ETL
У меня есть база данных на сервере А. Это имеет 2 таблицы:
(пример)
tblOrder
- OrderID
- CustomerName
- CustomerEmailAddress
- Переведен
tblOrderLine
- OrderID
- ProductID
- ProductName
- Цена
На сервере B он имеет идентичную таблицу (заказы передаются из Интернета в нашу бэкэнд-систему)
Используя RhinoETL, моя InputCommandOperation в настоящее время выглядит следующим образом:
class ReadOrdersFromWebDB : InputCommandOperation
{
public ReadOrdersFromServerA(ConnectionStringSettings connectionStringSettings)
: base(connectionStringSettings) { }
protected override Row CreateRowFromReader(IDataReader reader)
{
return Row.FromReader(reader);
}
protected override void PrepareCommand(IDbCommand cmd)
{
cmd.CommandText = "SELECT TOP 10 * FROM tblOrders WHERE Transferred = 0";
}
}
Поскольку на этом этапе нет преобразований, моя OutputCommandOperation будет выглядеть следующим образом:
class WriteOrdersToServerB : OutputCommandOperation
{
protected override void PrepareCommand(IDbCommand cmd, Row row)
{
cmd.CommandText =
@"INSERT INTO etc...........";
}
}
Что я хочу сделать, это изменить этот процесс, чтобы также получить подробности tblOrderLine от ServerA - если это возможно, без выполнения секундного запроса к базе данных (соединение)
Мне бы хотелось, чтобы в таблице tblOrderLine не было столбца «Передано», и я бы предпочел изменить InputCommand, чтобы включить соединение.
Как работает операция вставки после объединения в InputCommand?
Это вообще возможно?