【发布时间】:2019-11-23 09:11:09
【问题描述】:
我有 2 个独立创建/收集的 ID 列。我试图通过根据两个 ID 列中的任何一个确定哪些行是同一相关组 id 的一部分,将这两个 ID 列合并为一个列。我会根据一些规则考虑相关的行:
1:如果一个 LOAN 在多行中具有相同的值,则它们属于同一个组(示例中仅供参考)。我将其命名为loan_group。这里没有问题。
2:如果一个 COLLATERAL 在多行中具有相同的值,则它们属于临时组。我将其命名为lateral_group(与#1 相同的规则。)这里没有问题。
3:最后,我不知道如何准确地表达这一点,但任何时候属于同一组的值之间存在重叠(跨贷款和抵押列),这些组应进一步合并。例如:
LOAN COLLATERAL loan_group collateral_group final_grouping
---- ----------- ---------- ---------------- --------------
L1 C1* 1 1 **1**
L2** C1* 2 1 **1**
L5 C8 3 2 2
L2** C4*** 2 3 **1**
L6 C8 4 2 2
L7 C9 5 4 3
L8 C4*** 6 3 **1**
*因为第 1 行和第 2 行的值都是 C1,所以它们将被分配到相同的最终分组中
**因为第 2 行具有 LOAN 值 L2,这意味着我们可以将第 4 行包含在合并的最终分组中。该行可以通过 L2/C1 链接链接回第 1 行
***最后,因为第 4 行包含 COLLATERAL 值 C4,这意味着我们可以将第 7 行包含在合并的最终分组中。该行可以通过 L2/C4 和 L2/C1 链接链接回第一行
该数据集大约是 15m 个独特的 LOAN + COLLATERAL 组合。在某些边缘情况下,这些组可能会交叉几千个(可能 +1 万个)ID。我在 BQ 测试某些解决方案时遇到了一些资源问题(但这些问题主要与我对 BQ 的缺乏经验有关。)如果这会影响任何人的建议,请提个醒。
非常感谢您的宝贵时间,对于我在第一个版本中过于含糊/简短表示歉意...
【问题讨论】:
-
这看起来像是一个图行走问题。 BigQuery 没有对递归 CTE 或分层查询的原生支持,因此我认为这不能通过单个查询来完成。
-
这个问题对我来说很清楚!如果重新打开会回答。 @ehitch - 编辑您的问题并添加更多细节,使其符合重新开放的条件
-
@ehitch - 看起来这篇文章不会重新打开 - 你可能想发布新问题,以便我能够回答
标签: sql google-bigquery