C# RhinoETL-连接两个表作为输入,在输出时写入两个表
我正在用c语言编写一个ETL作业,使用Rhino ETL 我在服务器a上有一个数据库。这有两个表: 范例 T领主 订单编号 客户名称 客户邮箱地址 转移 特伯洛德林 订单编号 产品ID 产品名称 价格 在ServerB上,它有一个相同的表,订单从Web传输到我们的后端系统 使用RhinoETL,我的InputCommandOperation当前看起来像:C# RhinoETL-连接两个表作为输入,在输出时写入两个表,c#,sql,rhino,rhino-etl,C#,Sql,Rhino,Rhino Etl,我正在用c语言编写一个ETL作业,使用Rhino ETL 我在服务器a上有一个数据库。这有两个表: 范例 T领主 订单编号 客户名称 客户邮箱地址 转移 特伯洛德林 订单编号 产品ID 产品名称 价格 在ServerB上,它有一个相同的表,订单从Web传输到我们的后端系统 使用RhinoETL,我的InputCommandOperation当前看起来像: class ReadOrdersFromWebDB : InputCommandOperation { public ReadOrde
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...........";
}
}
我想做的是修改这个过程,同时从ServerA获取tblOrderLine详细信息——如果可能的话,不需要对db连接进行秒查询
我希望避免在tblOrderLine表上有一个已传输的列,并希望修改InputCommand以包含join
在InputCommand中加入联接后,插入操作如何工作?
这可能吗?我的理解是,您有两个表希望从ServerA上载到ServerB,如果可能,可以将ServerA中的两个表合并在一起,然后在ServerB中将它们再次拆分为两个表 如果tblOrder和tblOrderLine之间的关系是1对多,那么简单地忘记加入它们。它将创建冗余数据,更不用说选择TOP n将导致tblOrderLine中的某些项目被忽略。如果这两个表之间的关系是1:1,那么这是可能的,但我不确定这是否比单独查询这两个表更有效 您可以通过将从tblOrder提取的OrderID保存到列表中,然后查询tblOrderLine中的特定OrderID来避免在tblOrderLine上使用Transfer标志
SELECT TOP 10 *
FROM tblOrder
WHERE Transferred = 0
保存在此数据中找到的OrderID列表,并使用它查询tblOrderLine
SELECT *
FROM tblOrderLine
WHERE OrderID IN /* list of saved OrderID */