gpt4 book ai didi

ssis - ErrorColumn 值不作为 Lineage ID 存在

转载 作者:行者123 更新时间:2023-12-04 14:01:17 25 4
gpt4 key购买 nike

在插入目标表期间,发生的任何错误都被重定向到错误表,我们可以在其中看到 ErrorCodeErrorColumn .问题是我们得到了一个值 ErrorColumn它在包中的任何地方都不存在。也就是说,没有一列具有 LineageID等于 ErrorColumn .

后来,在每一列启用NULL条目的同时,我一一找到了导致问题的列。当我分析数据流任务中的列时,它没有 LineageID这是在 ErrorColumn 中报告的.例如,ErrorColumn报告为 413,但 LineageID在第一次合并时为 84,在各种排序期间它会发生变化。不管怎样,它永远不会变成 413。这个 ErrorColumn ID (413) 根本不存在,但它在错误重定向插入目标源(错误表)期间报告。

我检查了很多网站,但他们都建议通过 ComponenteMetaData.InputCollection 进行枚举。或 ComponentMetaData.OutputCollection在脚本任务中,然后通过列进行枚举以找到 LineageID ,但没有任何成功。

正如我所说,我已经解决了这个问题,但由于我们处于 ETL 过程的早期阶段,这可能会发生在其他一些情况下。如何解决这个问题?

最佳答案

我正在复制我的答案,以便我们可以在网站上获得权威的问答

What is the simple way to find the column name from Lineageid in SSIS

我记得说过这不会那么难,我可以在错误重定向中编写一些脚本来从输入集合中查找列名。
string badColumn = this.ComponentMetaData.InputCollection[Row.ErrorColumn].Name;
我了解到的是失败的列不在该集合中。嗯,是的,但是报告的 ErrorColumn 并不是我所需要的。我找不到那个包裹,但这里有一个例子,说明为什么我找不到我需要的东西。希望你会有更好的运气。

这是一个简单的数据流,一旦它由于被零除而到达派生列就会产生错误。 Derived 列生成一个新的输出列 (LookAtMe) 作为除法的结果。错误输出上的数据查看器告诉我失败的列是 73。使用上述脚本逻辑,如果我尝试访问输入集合中的第 73 列,它将失败,因为它不在集合中。 LineageID 73 是 LookAtMe 并且 LookAtMe 不在我的错误分支中,它只在非错误分支中。

Basic data flow

这是我的 XML 的副本,您可以看到,是的,outputColumn id 73 是 LookAtme。

<outputColumn id="73" name="LookAtMe" description="" lineageId="73" precision="0" scale="0" length="0" dataType="i4" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="Computation" errorRowDisposition="RedirectRow" truncationRowDisposition="RedirectRow" externalMetadataColumnId="0" mappedColumnId="0"><properties>

不过我真的很想要这些数据,而且我很聪明,所以我可以将所有结果重新组合在一起,然后有条件地将其拆分出来以得到它。问题是, Union All is an asynchronous transformation .异步转换导致数据从一组黄油复制到另一组,从而导致...分配新的沿袭 ID,因此即使使用联合将两个流重新组合在一起,您也无法调用数据流链来查找原始谱系 ID,因为它位于不同的缓冲区中。

在这一点上,我承认失败并决定我可以在我的包中没有智能/有用的错误报告。

2012年

SSIS 的 2012 版本改变了他们使用 LineageID 保持列同步的方式。它们没有将数字从源映射到接收器,而是使用元素的文本表示。上面引用的 XML 现在看起来像
 <outputColumn
refId="Package\DFT Generate Errors\DER Divide by SomeNumber.Outputs[Derived Column Output].Columns[LookAtMe]"
dataType="i4"
errorOrTruncationOperation="Computation"
errorRowDisposition="RedirectRow"
lineageId="Package\DFT Generate Errors\DER Divide by SomeNumber.Outputs[Derived Column Output].Columns[LookAtMe]"
name="LookAtMe"
truncationRowDisposition="FailComponent">

如果您现在查看 ErrorColumn,它们甚至不引用文本 lineageid。相反,它们引用第 6 列。如果我搜索源 XML,我不会在任何地方找到对第 6 列的引用。这一定是一些运行时魔法。

enter image description here

不幸的是,最终结果是相同的 - 您无法访问错误列,因为它是在此组件中创建的,因为它只存在于输出列集合中。它在错误列集合中不可用。

关于ssis - ErrorColumn 值不作为 Lineage ID 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com