Graph 可以将有向图分解为列表吗?
这更像是一个理论问题,但对于a来说,是否有可能将其浓缩成一个操作列表?或者,这是一种不能按如下顺序分解为平面列表的数据结构: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表示通过操作的数据流。也就是说,赋值语句和
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或其他应用程序中,当可以有多个输入时,它们是否使用多个进程/线程?或者通常是一个单一的过程?