SSIS:如何读取WebSphere MQ、转换和写入平面文件?
我在WebSphere MQ队列上有数据。我已经编写了一个脚本任务来读取数据,并且可以将其输出到变量或文本文件中。但我想将其作为数据流步骤的输入,并转换数据。最终目的地是平面文件 是否有办法将变量作为源读取到数据流步骤中?我可以将MQ数据写入文本文件,并在数据流中读取文本文件,但这似乎需要很大的开销。或者我可以跳过dataflow altogther,在一个脚本中编写所有的转换(但是为什么要首先使用SSI呢?) 有没有一种方法可以将原始文件从脚本步骤写入数据流组件SSIS:如何读取WebSphere MQ、转换和写入平面文件?,ssis,ibm-mq,Ssis,Ibm Mq,我在WebSphere MQ队列上有数据。我已经编写了一个脚本任务来读取数据,并且可以将其输出到变量或文本文件中。但我想将其作为数据流步骤的输入,并转换数据。最终目的地是平面文件 是否有办法将变量作为源读取到数据流步骤中?我可以将MQ数据写入文本文件,并在数据流中读取文本文件,但这似乎需要很大的开销。或者我可以跳过dataflow altogther,在一个脚本中编写所有的转换(但是为什么要首先使用SSI呢?) 有没有一种方法可以将原始文件从脚本步骤写入数据流组件 任何想法都值得赞赏 尝试使用M
任何想法都值得赞赏 尝试使用MQ中可用的Q程序而不是脚本。如果您有使用Web服务的脚本,您可以跳过所有中间输出,只需将其用作数据流中的源 将数据流任务拖到画布上,然后单击“添加脚本”组件。选择
Source
,而不是选择Transformation(最后一个选项)
双击脚本组件并选择输入和输出属性
。在“输出0”下,选择“输出列”,然后单击“添加列”,查看web服务的列数。适当地命名它们,并确保正确定义它们的元数据
定义列后,单击“返回脚本”选项卡,选择您的语言并编辑脚本。我们将在这里使用所有可以编写的、使用该服务的现有代码
在CreateNewOutputRows
方法中,需要迭代Websphere MQ请求的结果。对于返回的每一行,您将应用以下模式
public override void CreateNewOutputRows()
{
// TODO: Add code here or in the PreExecute to fill the iterable object, mqcollection
foreach (var row in mqcollection)
{
// Adds a new row into the downstream buffer
Output0Buffer.AddRow();
// Assign all the data to the correct locations
Output0Buffer.Column = row.Column;
Output0Buffer.Column1 = row.Column1;
// handle nulls appropriately
if (string.IsNullOrEmpty(row.Column2))
{
Output0Buffer.Column2_IsNull = true;
}
else
{
Output0Buffer.Column2 = row.Column2;
}
}
}
必须通过_IsNull属性处理空值,否则脚本将崩溃。与普通源代码相比,这是一项乏味的工作,但与转储到磁盘或其他登台机制相比,您的效率更高、速度更快、消耗的资源更少。因为我遇到了一些额外的“问题”,我想我应该发布我的最终解决方案 我使用的脚本不调用webservice,而是直接连接和读取WebSphere队列。但是,为了做到这一点,我必须添加对amqmdnet.dll的引用 您可以添加对脚本任务的引用(位于控制流画布上),但不能添加对脚本组件的引用(该组件是数据流的一部分) 因此,我有一个脚本任务,带有引用和代码来读取队列的内容。队列中的每一行只是一条固定宽度的记录,每一行都添加到一个列表中。最后,将列表放入在包级别声明的读/写对象变量中 该脚本将馈送到数据流任务中。数据流的第一个组件是脚本组件,创建为源代码,如上面billinkc所述。此脚本将对象变量强制转换回列表。然后将列表中的每个项目解析为输出缓冲区中的字段。
各种拆分和转换任务从那里接手。这正是我想要的。非常感谢您的详细解释!如果您发现此答案和其他任何答案非常有用,可以单击问题旁边的向上箭头。如果这解决了您的问题,您也可以单击复选标记以表示问题已被回答。谢谢您的帖子,cschneid。我将使用脚本组件作为源代码,因为我认为这是最简单的方法。