如何从同一数据管道中的另一行获取值?

Posted

技术标签:

【中文标题】如何从同一数据管道中的另一行获取值?【英文标题】:How to fetch value from another row within the same data pipleline? 【发布时间】:2008-10-08 14:33:53 【问题描述】:

我已加载数据并完成了对数据的各种转换,问题是数据中管理着父/子关系 - 最好通过示例来解释

每一行都有(列名组成)

row_key    parent_row_key   row_name    parent_row_name

有些行有 row_key == parent_row_key(它们自己的父级) 一些行与另一行相关 (例如,第 25 行是第 44 行的父行)。

在这种情况下,第 25 行是第 44 行的父行。我需要将第 25 行的 row_name 放在第 44 行的 parent_row_name 中。如何查询管道中的数据以获取值?

【问题讨论】:

【参考方案1】:

您不能只使用多播拆分数据,然后针对自身进行合并连接吗?

【讨论】:

当然是一条值得尝试的途径——产品最难的部分是学习如何使用它来解决问题。 毋庸置疑,在将其带入 SSIS 之前,让您查询的任何系统为您执行此操作会更容易,但我想您不会问这是否适合你的情况... 正确 - 我可能必须保存数据,然后通过一些简单的 Sql 任务进行分析 -> 至少在我掌握产品的窍门之前。 +1 - 我确实发现合并所需的排序可能会导致较大数据集(超过 100k 行的任何数据)的严重减速。在数据源上排序(即:您的查询有 ORDER BY)有很大帮助。【参考方案2】:

您可以将数据写入数据库中的临时表、原始文件目标或记录集目标(取决于数据集的大小)。然后你可以再次遍历你的数据并查询你的临时数据并找到正确的父级。

【讨论】:

【参考方案3】:

听起来像 Macola(Exact Software)处理交易的方式。在他们的情况下,将一笔交易添加到表中,并在行中包含对原始交易的引用 - 例如,如果原始交易是 1 月的购买,而 2 月有付款,则 2 月的付款将包括1 月付款中的交易编号,列中引用父项。由于没有外键关系,每个初始交易都会被赋予一个可以在整个系统的账本之间移动的 guid。

【讨论】:

【参考方案4】:

如你所说

我已加载数据并完成了对数据的各种转换

然后我可以假设您已经在临时表或临时表中拥有所有可用数据吗? 如果是这样,只需对字段进行更新就可以解决我猜的问题吗?假设暂存表中并非所有信息都可用,您可以先从暂存表中进行级联搜索,然后在未找到任何信息时从实际表中搜索该值。在一次更新中执行此操作很容易胜过逐行执行。 (特别是如果你有适当的索引可用)

UPDATE staging_table
   SET parent_row_name = COALESCE(new.row_name, old.row_name, '#N/A#')
  FROM staging_table upd
  LEFT OUTER JOIN staging_table new
               ON new.row_key = upd.parent_row_key
  LEFT OUTER JOIN destination_table old
               ON old.row_key = upd.parent_row_key

【讨论】:

以上是关于如何从同一数据管道中的另一行获取值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 中的另一行获取最小值?

如何从sql中的另一行获取值

比较两个列并从同一个表中的另一列获取数据

将数据从一个函数传递到同一个 Angular 组件中的另一个函数

如何选择(所有)表 1 中的一行,该行具有与表 2 相同的另一行

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427