Graph 可以将有向图分解为列表吗?

Graph 可以将有向图分解为列表吗?,graph,etl,directed-acyclic-graphs,Graph,Etl,Directed Acyclic Graphs,这更像是一个理论问题,但对于a来说,是否有可能将其浓缩成一个操作列表?或者,这是一种不能按如下顺序分解为平面列表的数据结构: STEPS = [ filter A to country = 'US', (join A to B on A.id=B.id) AS c, filter C to... ] 是否有可能构造一个不能分解而不丢失信息的DAG?是的,一个有向无环图(DAG)可以被压缩成一个有序的操作列表,如果,事实上,DAG表示通过操作的数据流。也就是说,赋值语句和

这更像是一个理论问题,但对于a来说,是否有可能将其浓缩成一个操作列表?或者,这是一种不能按如下顺序分解为平面列表的数据结构:

STEPS = [
    filter A to country = 'US',
    (join A to B on A.id=B.id) AS c,
    filter C to...
]

是否有可能构造一个不能分解而不丢失信息的DAG?

是的,一个有向无环图(DAG)可以被压缩成一个有序的操作列表,如果,事实上,DAG表示通过操作的数据流。也就是说,赋值语句和函数调用的有序列表可以表示为DAG,反之亦然

上面示例中的DAG可能如下所示

+-----+     +-------------+
|     |  A  |   filter I1 | A'
|  A  |-----|1  to country|---+                    
|     |     |       ='US' |   |                                           
+-----+     +-------------+   |  +--------------+   +-----------+   +----------+
                              +--|1  join I1 to | C |   filter  | C'|   Result |
                                 |   I2 on I1.id|---|1  I1 to...|---|1    = I1 |
                              +--|2      = I2.id|   |           |   |          |
                  +-------+   |  +--------------+   +------- ---+   +----------+
                  |       | B |                                  
                  |   B   |---+
                  |       |
                  +-------+
或者,可以将“操作列表”视为嵌套函数调用,从嵌套最深的函数到嵌套最少的函数进行计算。比如说,

Result = Fn3( Fn2( Fn1(A), B ) ).
DAG与此处重画的相同,没有显示中间变量,并且具有简化的函数名

+-----+     +-------------+
|     |     |             |
|  A  |-----|1    Fn1     |---+                    
|     |     |             |   |                                        
+-----+     +-------------+   |  +--------------+   +-----------+   +----------+
                              +--|1             |   |           |   |          |
                                 |      Fn2     |---|1   Fn3    |---|1  Result |
                              +--|2             |   |           |   |          |
                  +-------+   |  +--------------+   +------- ---+   +----------+
                  |       |   |                                  
                  |   B   |---+
                  |       |
                  +-------+
我不知道在从DAG分解到“操作列表”时会丢失任何信息。这两种形式是等价的



关于如何构造DAG来表示操作列表的一个实际示例可以在中找到,其中“指定可编程控制器编程语言的语法和语义…”该标准将DAG称为网络,定义为“互连图形元素的最大集合”(在偏序集合的上下文中)并给出了评估规则,包括“在评估所有输入状态之前,不得评估任何网络元素”的规则。该规则为操作顺序提供了基础。

回答得很好。在实际应用中,如Informatica或其他应用程序中,当可以有多个输入时,它们是否使用多个进程/线程?或者通常是一个单一的过程?