处理规则层次结构/树的最佳方法

Posted

技术标签:

【中文标题】处理规则层次结构/树的最佳方法【英文标题】:Best methods for processing a rule hierarchy/tree 【发布时间】:2021-10-11 08:35:07 【问题描述】:

我正在使用 Azure SQL 池/突触/SQL DW,并且有一个需要处理的规则层次结构。在每个级别,父级都可以指定是否需要所有 (AND) 或任何 (OR) 子级才能满足规则。层次结构中的每个级别都可以为父级指定不同的条件(因此您可以有一个包含 OR 等的 AND 条件)

在纯 SQL 中,这可以实现为一个循环,该循环从叶级别开始,并通过将层次结构左连接到要评估的数据上来解析每个级别。任何不符合条件的数据都会从数据集中删除。通过计算存在的不同子项数和匹配的子项数来处理 AND 条件。

这会创建大量复杂的 SQL 来维护,并且使用效率较低的循环。我怀疑图形功能在这里可能是一个更好的结构,但看不到任何真正有助于处理的内置功能。同样,hierarchyid 听起来很合适,但我不相信它存在于 Azure Synapse/Pools/DW

【问题讨论】:

【参考方案1】:

Azure Synapse Analytics 专用 SQL 池不支持 SQL Server box 产品和 Azure SQL DB 中可用的图表或 hierarchyId。因此,您最好的选择可能是使用附近的 Azure SQL DB 来执行此处理。使用 Azure 数据工厂 (ADF) 或 Synapse Pipelines 在它们之间移动数据。

另外,我已经回答了一些问题,我认为它们很好地涵盖了在 Synapse 中使用图形或分层数据以及一些方法 其中包括:使用 Azure SQL DB、使用 WHILE 循环以及使用 Azure Synapse Notebooks 和 GraphFrames 库:

Azure Synapse Analytics 中针对日期的递归查询 这是有人认为他们需要递归查询但没有的地方: Recursive Query in Azure Synapse Analytics for Dates Synapse ***父层次结构 覆盖范围和 SQL 循环和 GraphFrames 选项的示例:https://***.com/a/67065509/1527504

第二个问题特别透彻。

【讨论】:

以上是关于处理规则层次结构/树的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

处理规则验证的最佳方法是啥

树的前中后序遍历和层次遍历

数据结构与算法: 三十张图弄懂「图的两种遍历方式」

第五章学习小结

数据结构2 树与二叉树

基于不规则时间序列数据计算规则周期平均值的最佳方法