处理规则的最佳方法 hierarchy/tree

Best methods for processing a rule hierarchy/tree

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

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

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

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

或者,我做了一些问题的回答,我认为这些回答很好地涵盖了在 Synapse 中使用图形或分层数据以及一些方法 其中包括:使用 Azure SQL 数据库,使用 WHILE 循环以及使用 Azure Synapse Notebooks 和 GraphFrames 库:

  • Azure Synapse Analytics 中日期的递归查询 这是有人认为他们需要递归查询但没有的地方:
  • Synapse 顶级父层次结构 SQL 循环和 GraphFrames 选项的覆盖范围和示例:

特别是第二个问题问的很透彻