HK40040934A - Updating executable graphs - Google Patents
Updating executable graphs Download PDFInfo
- Publication number
- HK40040934A HK40040934A HK62021031195.2A HK62021031195A HK40040934A HK 40040934 A HK40040934 A HK 40040934A HK 62021031195 A HK62021031195 A HK 62021031195A HK 40040934 A HK40040934 A HK 40040934A
- Authority
- HK
- Hong Kong
- Prior art keywords
- differences
- node
- graph
- link
- identified
- Prior art date
Links
Description
This application claims priority to U.S. Patent Application Serial No. 62/681,395, filed on June 6, 2018 , and to U.S. Patent Application Serial No. 16/153,320, filed on October 5, 2018 .
During development or execution of a computer program, changes can be made to the computer program. Sometimes, one developer or team of developers can make changes to the computer program independently from the changes made by another developer or team of developers.
Laura Wingerd described "Convergence vs. Divergence Convergence vs. Divergence Purposeful Merging with Perforce", (20060901), URL: https://www.perforce.com/sites/default/files/convergence-divergence-merging-wingerd.pdf, (20190809)
Scott Chacon described "Git Branching" in Pro Git, Apress, (20090827).
The present invention relates to a computer-implemented method according to independent claim 1, two computer-readable medium according to independent claim 19 into a computing system according to independent claim 20. Some of the preferred embodiments are described in dependent claims 2 to 18, in the description and in the figures.
The approaches described here enable efficient and reliable automated merging of multiple versions of a dataflow graph (i.e., a computer program) into a single, updated dataflow graph that reflects the changes in each of the versions. This automated merge can be used, e.g., to efficiently and reliably combine development or debugging work on the computer program performed independently by each of multiple teams into a single, updated computer program. This efficient and reliable version management assists program developers during the process of software development and hence also makes this development process more efficient and precise.
- Fig. 1 is a graphical representation of a dataflow graph.
- Figs. 2A-2C are graphical representations of dataflow graphs.
- Fig. 3 is a system diagram.
- Figs. 4A-4D are graphical representations of dataflow graphs.
- Figs. 5A and 5B are flow charts.
- Figs. 6-9 are screenshots.
- Fig. 10 is a flow chart
- Fig. 11 is a diagram of a data processing system for developing dataflow graphs.
We describe here an approach to combining multiple versions of a computer program into a single, updated program. For instance, when developing or debugging a computer program, such as a dataflow graph, e.g., a data processing graph, a control graph, or a plan, multiple developers or sets of developers may each work on the computer program independently. As a result, multiple modified versions of the computer program may be generated. The differences between the base computer program and each of these modified versions of the base computer program can be identified and a complete set of all of the differences can be applied to the base computer program to generate a single, updated computer program that reflects the changes made in each of the modified versions of the base computer program.
A dataflow graph is a graphical representation of a computer program that can include nodes representative of data processing components and datasets, such as data sources and data sinks. Datasets can be, for example, files, database tables, or other types of data sources or sinks that can provide data (e.g., data records) for processing by the graph or receive data processed by the graph. Data processing components and datasets are sometimes collectively referred to as nodes of the graph. A link connecting two nodes of a graph represents a flow of information, such as data or control signals, between the first node and the second node. Such dataflow graphs (sometimes referred to as graphs) can be data processing graphs, control graphs, or plans. In some examples, dataflow graphs can be capable of being executed to carry out processing of the information. In some examples, a dataflow graph is not executable, e.g., a dataflow graph that is a representation of a computer program that is still undergoing development or debugging. Fig. 1 shows a dataflow graph 10 that is configured to process data and that includes data sources 12, 18 each connected by a respective link 14, 20 to a filter node 16. The filter node 16 is connected by links 24, 28 to data sinks 22, 26, respectively.
The nodes of a graph can have input ports and/or output ports to which links can be connected. In the example of Fig. 1 , the upstream ends of the links 14, 20 are connected to an output port of the corresponding data source 12, 18. The upstream end of the link 24 is connected to an output port of the filter node 16. The downstream ends of the links 14, 20 are connected to an input port of the filter node 16. The downstream end of the links 24, 28 is connected to an input port of the corresponding data sink 22, 26.
Data processing components execute operations to process or manipulate data. A node is a graphical representation of a data processing component (e.g. a combination of software and hardware) that is an object defined by programming code that, when executed, implements the operation of the data processing component. Examples of data processing components include mapping components, filter components, deduplication components, aggregation components, replicate components, normalization components, partition and sort components, join components, or other types of data processing components. In some examples, data source and data sink components can be considered data processing components. The operation of a data processing component can be defined with respect to one or more parameters. The parameters can be defined in a file (e.g., a . dml file) that is referenced by the code of the data processing component. For instance, the file can include values or expressions for parameters associated with the data processing component. When the graph is instantiated (e.g., at runtime), expressions for the parameters are evaluated to obtain values for the parameters, sometimes referred to as resolving the parameters. Parameter values or expressions can be defined, for example, by a user over a user interface (e.g., in response to a prompt), defined from a file, or defined in terms of another parameter in the same context or in a different context. For example, a parameter can be exported from a different context (e.g., a parameter evaluated in the context of a different component) by designating the parameter to have a "same as" relationship to another parameter. In the example of Fig. 1 , the filter node 16 and its corresponding component have an associated parameter set 15.
We refer to the initial, unmodified dataflow graph as the base executable graph, or as the base graph. A first modified version of the graph that has been modified relative to the base graph is referred to as the source executable graph, or as the source graph. A second modified version of the graph that has been modified relative to the base graph is referred to as the target executable graph, or as the target graph. The graph that incorporates the changes from both the source executable graph and the target executable graph is referred to as the updated dataflow graph.
A differencing analysis is performed on each of the source graph and the target graph to identify a corresponding set of differences between the base graph and the source and target graphs, respectively. The result of the differencing analysis is multiple sets of differences, each indicative of the differences between the base graph and one of the source graph and the target graph. The multiple sets of differences are merged into a single, set of combined differences. The set of combined differences is applied to the base graph to generate the updated graph. This contributes to providing the efficient and reliable version management mentioned above.
In an example, the dataflow graph 10 of Fig. 1 is the base graph. Figs. 2A and 2B show a source graph 30 and a target graph 40, respectively. A differencing analysis is performed for each of the source graph 30 and the target graph 40 to identify the differences between the base graph 10 and each graph 30, 40. A differencing analysis of a first graph and a second graph (e.g., the base graph 10 and the source graph 30) identifies nodes present in the source graph 30 but not in the base graph 10 (referred to as added nodes), one or more nodes present in the base graph 10 but not in the source graph 30 (referred to as deleted nodes), and one or more nodes present in both the base graph 10 and the source graph 30 but having been modified (referred to as modified nodes). A modified node can be generally similar between the first graph and the second graph, but with changes to parameters, attributes, or other features associated with the node, as discussed further below. A differencing analysis can also identify differences between one or more links of the first graph and one or more links of the second graph. Additional description of differencing analyses is provided below.
In the example of Figs. 2A and 2B , the differencing analysis for the source graph 30 results in a first set of differences identifying an added node 32, added flows 34, 35, 36, and deleted flows 14, 20. The differencing analysis for the target graph 40 results in a second set of differences identifying a modified node 16 having a changed parameter set 15', a deleted node 26, and a deleted link 28.
The multiple sets of differences are joined into a single set of combined differences, described in more detail below. In the example of Figs. 2A and 2B , the set of combined differences identifies the added node 32, the deleted node 26, the modified node 16, and the added and deleted flows. Referring also to Fig. 2C , the set of combined differences is applied to the base graph 10 (or a copy thereof) to generate an updated graph 50. The updated graph 50 includes the nodes and links of the base graph 10, modified according to the set of combined differences. That is, nodes and links added in any one of the source and target graphs compared to the base graph are added compared to the base graph (i.e. generated) in the updated graph. Nodes and links deleted in any one of the source and target graphs compared to the base graph are deleted compared to the base graph (i.e. not generated) in the updated graph.
Referring to Fig. 3 , a graph updating system 300 identifies the differences between a base graph 302 and each of a source graph 304 and a target graph 306 and generates a single, updated graph 350 that reflects the changes made in both graphs 304, 306 relative to the base graph 302. The graph updating system 300 includes a differencing engine 310 that performs a differencing analysis for each of the source graph 304 and the target graph 306 and outputs a set of differences 312, 314 corresponding to each graph 304, 306. Each set of differences identifies the differences between the base graph 302 and the corresponding graph 304, 306. The graph updating system 300 also includes a merging engine 320 that merges the multiple sets of differences 312, 314 into a single, set of combined differences 322. A graph updating engine 330 generates the updated graph 350 based on the base graph 302 and the set of combined differences 322.
A differencing analysis identifies, for a given graph (e.g., source graph or target graph), nodes in the base graph 302 that have been deleted in the source or target graph, nodes that have been added to the source or target graph, and nodes that have been modified in the source or target graph. In some examples, the differencing analysis can also analyze links to identify deleted links, added links, and modified links. The differencing engine 310 compares the specification of the base graph 302 to the specification of each of the source graph and the target graph to determine which nodes (e.g., nodes corresponding to data processing components, input datasets or output datasets) in the base graph 302 correspond to nodes in each of the source graph and the target graph. The specification of a graph is a file that is separate from the graph and that defines the elements of the graph, such as the nodes and links of the graph.
Corresponding nodes are nodes that somehow involved in both the base graph and the source or target graph but are not necessarily identical and can have differences between the base graph and the source or target graph, but are generally similar enough to be regarded as the same node in both graphs (such as nodes with different associated parameter sets but otherwise identical). In some examples, the differencing engine 310 identifies corresponding nodes based on metadata associated with the nodes, such as one or more of the type of node (e.g., a data processing component or a dataset), a name of the node, a unique identifier of the node, or other metadata associated with the node. In some examples, the differencing engine 310 identifies corresponding nodes based on information associated with data flow into or out of the nodes or components, such as the names or number of ports, the names or sources of data flows into the nodes, the names or destinations of data flows out of the nodes or components, or other information associated with data flow into or out of the nodes or components. In some examples, the differencing engine 310 identifies corresponding nodes based on topological information, such as where a particular node is positioned in the graph relative to other nodes (e.g., which node or nodes are directly upstream or downstream of the particular node). In some examples, the differencing engine 310 identifies corresponding nodes based on the location (e.g., x-y coordinates) of the nodes in a graphical representation of the graphs on a canvas. In some examples, the differencing engine 310 disregards location information in identifying corresponding nodes, e.g., because the location of a node on a canvas may have no effect on the functionality of the node or of the graph containing the node.
In a differencing analysis for a given graph (e.g., the source graph 304 or the target graph 306), any node in the base graph 302 for which there is no corresponding node in the source graph 304 or the target graph 306 is identified by the differencing engine 310 as a deleted node in the set of differences for that graph. Any node in the source graph 304 or the target graph 306 for which there is no corresponding node in the base graph 302 is identified by the differencing engine 310 as an added node in the set of differences for that graph.
Pairs of corresponding nodes are further analyzed by the differencing engine 310 to determine whether the node in the source graph 304 or target graph 306 has any differences relative to the corresponding node in the base graph 302. If a difference is identified, the node is identified by the differencing engine 310 as a modified node. In some examples, the differencing engine 310 can analyze both features of a node that can affect the execution of a graph and features of a node that do not affect the execution of a graph. Features that affect the execution of a graph can include, for instance, parameters, such as parameter expressions or parameter values. Features that do not affect the execution of a graph can include, for instance, attribute values (e.g., author attributes, name attributes, version attributes, or other attributes), comments, legends, formats (e.g., fonts), the location of a node on a canvas, or other features. In some examples, the differencing engine 310 can analyze only features that can affect the execution of a graph and can disregard features that do not affect the execution of the graph.
An analysis of parameters of pairs of corresponding nodes can identify whether any parameters were added (for instance, a parameter that is present in the node of the source or target graph but not present in the corresponding node of the base graph) or removed (for instance, a parameter that is present in the node of the base graph but not present in the corresponding node of the source or target graph). An analysis of parameters can include an analysis of expressions defining the parameters, values of the parameters, or both. To analyze the expressions for parameters, the parameter analysis can be performed on the source code corresponding to each node.
In some examples, a differencing analysis can also include an analysis of external files referenced by the base graph and the source or target graph. In some examples, only certain types of files are analyzed by the differencing engine 310, such as record format files (e.g., .dml files), transform files (e.g., .xfr files), or other types of files the contents of which can affect execution of the graphs. Other files, such as files providing data for processing by the graphs or plans, are not considered.
The result of a differencing analysis between the base graph and a source or target graph is a set of differences (e.g., sets 312, 314) that includes information indicative of each of the differences (e.g., each of the node deletions, node additions, and node modifications). The information indicative of a deleted node can include one or more or all of the following:
- Information identifying the node in the base graph (e.g., a unique identifier of the node) and indicative of the deletion of the node;
- Information identifying a node upstream of the node in the base graph;
- Information identifying a node downstream of the node in the base graph;
- Information identifying an input flow from an upstream node into the node in the base graph and indicative of the deletion of the input link;
- Information identifying an output link from the node in the base graph into a downstream node and indicative of the deletion of the link; and
- Information identifying a flow connecting the upstream node to the downstream node in the source or target graph and indicative of the addition of the link.
The information indicative of an added node can include one or more or all of the following:
- Information indicative of the functionality of the node (e.g., a specification of the node, a parameter set for the node, or other information indicative of node functionality);
- Information identifying a node upstream of the added node in the source or target graph;
- Information identifying a node downstream of the added node in the source or target graph;
- Information identifying a link from the upstream node to the added node in the source or target graph and indicative of the addition of the link;
- Information identifying a link from the added node to the downstream node in the source or target graph and indicative of the addition of the link; and
- Information identifying a link from the upstream node to the downstream node in the base graph and indicative of the deletion of the link.
The information indicative of a modified node can include one or more or all of the following:
- Information identifying the node; and
- Information indicative of the modification to the node (e.g., an updated parameter list).
Additional description of differencing analyses is provided in U.S. Application No. 15/587,987, filed on May 5, 2017 .
The merging engine 320 merges the multiple sets of differences 312, 314 into the set of combined differences 322. To do so, the merging engine 320 determines a correspondence between the sets of differences 312, 314 to identify (1) differences that involve nodes that are identified in only one of the sets of differences and (2) differences that involve nodes that are identified in two or more of the multiple sets of differences. A difference involving a particular node means a difference for which the information indicative of the difference identifies the particular node, e.g., as a deleted node, an added node, a modified node, an upstream node, or a downstream node. For each difference involving nodes that are identified in only one of the sets of differences, the information indicative of that difference is added to the set of combined differences 322. For each difference involving nodes that are identified in two or more sets of differences, the merging engine 320 performs a compatibility analysis.
The compatibility analysis is an analysis that determines whether a first difference is conflicting or compatible with a second difference. A pair of differences are referred to as a pair of conflicts if application of a one of the differences to the copy of the base graph would prevent application of the other one of the differences to the copy. One example of a pair of conflicts is the deletion of a filter component and a change to a parameter of that same filter component. Another example of a pair of conflicts is the deletion of a reformat component and the addition of a data source connected to that reformat component by a flow. Another example of a pair of conflicts is a first change to a parameter of a component and a second, different change to that same parameter of the component.
The merging engine 320 resolves each pair of conflicts by selecting one of the pair of differences. The information indicative of the selected difference is added to the set of combined differences 322. In some examples, the merging engine 320 resolves each pair of differences with reference to a selection criterion 324, e.g., an instruction provided by a user for how to resolve conflicts. For instance, the selection criterion may specify a priority order for the multiple sets of differences and indicate that the merging engine 320 is to select the difference from the higher priority set of differences. In some examples, the merging engine 320 causes the pairs of conflicts to be displayed on a user interface 340 such that a user can manually select a difference from each pair of conflicts.
In some examples, the pairs of conflicts can be presented to a user as textual information, e.g., as a list. In some examples, the pairs of conflicts can be presented to a user using a graphical representation of each of the differences, e.g., as described in U.S. Application No. 15/587,987, filed on May 5, 2017 .
The graph updating engine 330 generates the updated graph 350 based on the differences in the set of combined differences 322. For instance, the graph updating engine 330 can generate a copy of the base graph 302 and apply the differences in the set of combined differences 322 to the copy. For each difference, the set of combined differences 322 identifies one or more changes to be made, including addition or deletion of links and addition, deletion, or modification of nodes. The graph updating engine 330 applies each of these changes to the copy. The copy with all changes applied is the updated graph 350.
In some examples, the set of combined differences can include only those differences that are compatible, and the updated graph 350 thus reflects only compatible differences. Once the conflicting pairs of differences are resolved, the resolved differences can also be applied to the updated graph.
Referring to Figs. 4A-4D , an example of merging differences is shown. Fig. 4A shows a base graph 400 for processing bank transaction records. The base graph 400 has a data source 402, a reformat node 404, a filter node 406, and a data sink 408. The filter node 406 is associated with a parameter set 405 that includes a filter_by parameter identifying the transaction_amount field. The nodes are connected via links 410, 412, 416, as shown in Fig. 4A .
The set of differences for the source graph 420 includes the following information:
- Information indicative of the deleted filter node 406: o An identifier of the filter node 406;o An identifier of the reformat node 404 upstream of the filter node 406 in the base graph 400;o An identifier of the data sink node 408 downstream of the filter node 406 in the base graph;∘ An identifier of the link 412 between the reformat node 404 and the filter node 406 in the base graph and an indication of the deletion of the link 412;o An identifier of the link 416 between the filter node 406 and the data sink node 408 in the base graph and an indication of the deletion of the link 416; ando An identifier of a new link 424 between the reformat node 404 and the data sink node 408 in the source graph 420.
- Information indicative of the new data source node 422: o A specification of the data source node 422;o An identifier of the reformat node 404 downstream of the data source node 422 in the source graph 420; ando An identifier of a new link 426 between the data source node 422 and the reformat node 404 in the source graph 420.
The set of differences for the target graph 440 includes the following information:
- Information indicative of the modification of the filter node 406: o An identifier of the filter node 406;o An identifier of the reformat node upstream of the filter node 406 in the target graph 440;o An identifier of the sort node downstream of the filter node 406 in the target graph 440;o An identifier for each of the links 412, 444 connected to the filter node402; ando A specification of the changed parameter set 405'.
- Information indicative of the addition of sort node 442:o A specification of the sort node 442;o A specification of the parameter set for the sort node;o An identifier of the filter node 406 upstream of the sort node 442 in the target graph 440;o An identifier of the data sink node 408 downstream of the sort node 442 in the target graph 440;o An identifier of a new link 444 between the filter node 406 and the sort node 442 in the target graph 440;o An identifier of a new link 446 between the sort node 442 and the data sink 408 in the target graph; ando An identifier of the link 416 between the filter node 406 and the data sink 408 in the base graph and an indication of the deletion of the link 416.
A compatibility analysis determines that the addition of the data source 422 in the source graph 420 is compatible with all differences in the target graph 440, and that the addition of the sort node 442 in the target graph 440 is compatible with all differences in the source graph 420. The information listed above indicative of the addition of the data source 422 and the addition of the sort component 442 is added to a set of combined differences.
The compatibility analysis identifies the deletion of the filter node 406 in the source graph 420 as conflicting with the modification of the parameter set 15 associated with the filter node 406 in the target graph 440. In this example, this conflict is presented to a user on a user interface and the user may, e.g., respond with a selection of the modification of the parameter set. Alternatively, a selection criterion may automatically be applied by the system 300 and may lead to the same selection. The information listed above indicative of the modification of the parameter set is added to the set of combined differences. The information indicative of the deletion of the filter node 406 is not added to the set of combined differences.
Referring to Fig. 4D , the differences in the set of combined differences are applied to a copy of the base graph 400 to generate an updated graph 450. Specifically, the additions, deletions, and modifications to nodes and links as specified above are applied to the copy of the base graph 400. For instance, to apply the addition of the sort node to the copy of the base graph, the link 416 is deleted, the sort node 442 is added, and the new links 446, 448 are added to connect the sort node to upstream and downstream nodes. Each of the nodes in graph 450 represents a corresponding component and each of the links in graph 450 represent a corresponding flow of data between the components.
A second set of differences is determined between the base graph and the target graph (502). To determine the second set of differences, a correspondence is determined between each node or link in the base graph and the nodes or links in the target graph. Each first node or link in the base graph that corresponds to a second node or link in the target graph is compared to the corresponding second node or link and any difference between the first node or link and the second node or link is identified. If there is no difference between the first node or link and the second node or link, the second node or link is not included in the second set of differences. If there is a difference between the first node or link and the second node or link, the second node or link is designated as a modified node or link in the second set of differences. A node or link in the base graph that does not correspond to a node or link in the target graph is designated as a deleted node or link in the second set of differences.
A particular difference in the first set of differences is evaluated to determine a correspondence between the particular difference and a difference in the second set of differences (504). If there is no difference in the second set of differences that corresponds to the particular difference in the first set of differences (506), the particular difference in the first set of differences is added to the set of combined differences (508) and designated as having been addressed. If there is a difference in the second set of differences that corresponds to the particular difference in the first set of differences (510), a compatibility of the particular difference with the corresponding difference in the second set of differences is determined (512). If the differences are determined to be compatible (514), the particular difference in the first set of differences is added to the set of combined differences (508) and both differences are designated as having been addressed. If the differences are determined to be incompatible (516), a relative priority of each of the differences is determined (518), e.g., according to a predefined rule or based on user input. The higher priority difference is added to the set of combined differences (520) and both differences are designated as having been addressed.
The first set of differences is reviewed to determine whether all differences have been addressed (522). If an unaddressed difference remains in the first set of differences (524), another difference in the first set of differences is evaluated (504). If all of the differences in the first set of differences have been addressed (526), any unaddressed differences in the second set of differences are added to the set of combined differences (528). The set of combined differences is applied to the base graph to generate the updated graph (530).
Referring specifically to Fig. 6 , a graphical user interface 600 shows a list of updated graphs created by merging differences between a base graph and source and target graphs. Icons can indicate the status of each updated graph, e.g., indicating that the updated graph has no compatibility issues (e.g., as shown for the calculate_interest_daily graph) or has one or more conflicting pairs of differences (e.g., as shown for the apply_interest_monthly graph). The user can select one of the graphs to view information about the graph. For instance, for a graph with one or more conflicting pairs of differences, the user can view a graphical representation of the differences between the base graph and one or more of the source and target graphs. An example of a graphical representation of the differences is shown in Fig 7 .
Referring to Fig. 8 , in some examples, the conflicts can be represented in textual format. For instance, in the example of Fig. 8 , the source graph includes a "+ 400.00" value and the target graph includes a "+ 200.0" value. When conflicts are represented as text, a user can edit the text to leave the desired contents (e.g., to delete the text corresponding to the source graph or the target graph for a given conflict). In some examples, all differences are included in the text and conflicting differences are denoted by a marker, such as sandwiched between "««««" and "»»»»>" markers to enable the user to easily locate all conflicts.
Referring to Fig. 9 , in some examples, the conflicts can be represented graphically. To address conflicts, the user can select (e.g., click or tap on) each conflict to access a textual representation of the conflict. In some examples, conflicts can be addressed directly through the graphical representation.
A correspondence between the differences in the first set of differences and the differences in the second set of differences is characterized (56). The characterization includes identifying one or more of (i) a node or link identified in the first set of differences that corresponds to a node or link identified in the second set of differences, (ii) a node or link identified in the first set of differences that does not correspond to any node or link identified in the second set of differences, or (iii) a node or link identified in the second set of differences that does not correspond to any node or link identified in the first set of differences. A compatibility between the node or link identified in the first set of differences and the corresponding node or link identified in the second set of differences is determined (58).
A set of combined differences is determined based on the characterized correspondence, the first set of differences between the base graph and the source graph, and the second set of differences between the base graph and the target graph (60). The set of combined differences can be determined based on the compatibility between the node or link identified in the first set of differences and the corresponding node or link identified in the second set of differences. Included in the set of combined differences can be information indicative of the node or link identified in the first set of differences that does not correspond to any node or link identified in the second set of differences, or information indicative the node or link identified in the second set of differences that does not correspond to any node or link identified in the first set of differences.
The updated dataflow graph is generated based on the base graph and the set of combined differences (62).
In some examples, a component of a graph can be implemented using a set of other components that are themselves interconnected with flows. This set of components through which a component of a graph is implemented is referred to as a subgraph, and is a node of the graph. The approaches described here can be used to merge differences between graphs including subgraphs.
A plan is a visual representation of a process that involves the execution of multiple graphs. In a plan, the individual graphs are the nodes and are interconnected by flows indicative of the flow of data among the graphs of the plan.
Storage devices providing the data source 1002 may be local to the execution environment 1004, for example, being stored on a storage medium (e.g., hard drive 1008) connected to a computer hosting the execution environment 1004, or may be remote to the execution environment 1004, for example, being hosted on a remote system (e.g., mainframe computer 1010) in communication with a computer hosting the execution environment 1004, over a remote connection (e.g., provided by a cloud computing infrastructure).
The pre-processing module 1006 reads data from the data source 1002 and prepares data processing applications (e.g. an executable dataflow graph) for execution. For instance, the pre-processing module 1006 can compile the data processing application, store and/or load a compiled data processing application to and/or from a data storage system 1016 accessible to the execution environment 1004, and perform other tasks to prepare a data processing application for execution.
The execution module 1012 executes the data processing application prepared by the pre-processing module 1006 to process a set of data and generate output data 1014 that results from the processing. The output data 1014 may be stored back in the data source 1002 or in a data storage system 1016 accessible to the execution environment 1004, or otherwise used. The data storage system 1016 is also accessible to an optional development environment 1018 in which a developer 1020 is able to design and edit the data processing applications to be executed by the execution module 1012. The development environment 1018 is, in some implementations, a system for developing applications as dataflow graphs that include vertices (representing data processing components or datasets) connected by directed links (representing flows of work elements, i.e., data) between the vertices. For example, such an environment is described in more detail in U.S. Patent Publication No. 2007/0011668 , titled "Managing Parameters for Graph-Based Applications". A system for executing such graph-based computations is described in U.S. Patent 5,966,072 , titled "EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS". Dataflow graphs made in accordance with this system provide methods for getting information into and out of individual processes represented by graph components, for moving information between the processes, and for defining a running order for the processes. This system includes algorithms that choose interprocess communication methods from any available methods (for example, communication paths according to the links of the graph can use TCP/IP or UNIX domain sockets, or use shared memory to pass data between the processes).
The pre-processing module 1006 can receive data from a variety of types of systems that may embody the data source 1002, including different forms of database systems. The data may be organized as records having values for respective fields (also called "attributes" or "columns"), including possibly null values. When first reading data from a data source, the pre-processing module 1006 typically starts with some initial format information about records in that data source. In some circumstances, the record structure of the data source may not be known initially and may instead be determined after analysis of the data source or the data. The initial information about records can include, for example, the number of bits that represent a distinct value, the order of fields within a record, and the type of value (e.g., string, signed/unsigned integer) represented by the bits.
In other words, and generally applicable to executable dataflow graphs described herein, the executable dataflow graph implements a graph-based computation performed on data flowing from one or more input data sets of a data source 1002 through the data processing components to one or more output data sets, wherein the dataflow graph is specified by data structures in the data storage 1014, the dataflow graph having the nodes that are specified by the data structures and representing the data processing components connected by the one or more links, the links being specified by the data structures and representing data flows between the data processing components. The execution environment or runtime environment 1004 is coupled to the data storage 1014 and is hosted on one or more computers, the runtime environment 1004 including the pre-processing module 1006 configured to read the stored data structures specifying the dataflow graph and to allocate and configure computing resources (e.g. processes, memory, CPUs etc.) for performing the computation of the data processing components that are assigned to the dataflow graph by the pre-processing module 1006, the runtime environment 1004 including the execution module 1012 to schedule and control execution of the computation of the data processing components. In other words, the runtime or execution environment 1004 hosted on one or more computers is configured to read data from the data source 1002 and to process the data using an executable computer program expressed in form of the dataflow graph.
The approaches described above can be implemented using a computing system executing suitable software. For example, the software may include procedures in one or more computer programs that execute on one or more programmed or programmable computing system (which may be of various architectures such as distributed, client/server, or grid) each including at least one processor, at least one data storage system (including volatile and/or non-volatile memory and/or storage elements), at least one user interface (for receiving input using at least one input device or port, and for providing output using at least one output device or port). The software may include one or more modules of a larger program, for example, that provides services related to the design, configuration, and execution of graphs. The modules of the program (e.g., elements of a graph) can be implemented as data structures or other organized data conforming to a data model stored in a data repository.
The software may be provided on a tangible, non-transitory medium, such as a CD-ROM or other computer-readable medium (e.g., readable by a general or special purpose computing system or device), or delivered (e.g., encoded in a propagated signal) over a communication medium of a network to a tangible, non-transitory medium of a computing system where it is executed. Some or all of the processing may be performed on a special purpose computer, or using special-purpose hardware, such as coprocessors or field-programmable gate arrays (FPGAs) or dedicated, application-specific integrated circuits (ASICs). The processing may be implemented in a distributed manner in which different parts of the computation specified by the software are performed by different computing elements. Each such computer program is preferably stored on or downloaded to a computer-readable storage medium (e.g., solid state memory or media, or magnetic or optical media) of a storage device accessible by a general or special purpose programmable computer, for configuring and operating the computer when the storage device medium is read by the computer to perform the processing described herein. The inventive system may also be considered to be implemented as a tangible, non-transitory medium, configured with a computer program, where the medium so configured causes a computer to operate in a specific and predefined manner to perform one or more of the processing steps described herein.
A number of embodiments of the invention have been described. Nevertheless, it is to be understood that the foregoing description is intended to illustrate and not to limit the scope of the invention, which is defined by the scope of the following claims. Accordingly, other embodiments are also within the scope of the following claims. For example, various modifications of the embodiments may be made within the scope of the claimed invention. Additionally, some of the steps described above may be order independent, and thus can be performed in an order different from that described.
Claims (20)
- A computer-implemented method for generating an updated dataflow graph (350, 450) based on a base graph (10, 302, 400), the method including:identifying differences between a first dataflow graph and each of a second dataflow graph and a third dataflow graph, wherein the first dataflow graph includes the base graph (10, 302, 400), the second dataflow graph includes a source graph (30, 52, 304, 420, 500, 550), and the third dataflow graph includes a target graph (40, 54, 60, 306, 440, 502),wherein a specification of each of the dataflow graphs defines nodes (16, 26, 32, 404, 406, 408, 422, 442), at least one of the nodes (16, 26, 32, 404, 406, 408, 422, 442) representing a data processing component defining an operation to be performed to process data provided to the data processing component, and one or more links (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) connecting the nodes (16, 26, 32, 404, 406, 408, 422, 442) and each representing a flow of data, andwherein the identifying includes:comparing a specification of the base graph (10, 302, 400) and a specification of the source graph (30, 52, 304, 420, 500, 550) to identify a first set of differences between the base graph (10, 302, 400) and the source graph (30, 52, 304, 420, 500, 550), the first set of differences including information indicative of one or more of a first deleted node (16, 26, 32, 404, 406, 408, 422, 442), a first deleted link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), a first added node (16, 26, 32, 404, 406, 408, 422, 442), a first added link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), a first modified node (16, 26, 32, 404, 406, 408, 422, 442), or a first modified link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), in which comparing a specification of the base graph (10, 302, 400) and a specification of the source graph (30, 52, 304, 420, 500, 550) includes determining a correspondence between the base graph (10, 302, 400) and the source graph (30, 52, 304, 420, 500, 550), in which determining the correspondence between the base graph (10, 302, 400) and the source graph (30, 52, 304, 420, 500, 550) includes one or more of 1) identifying a first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the base graph (10, 302, 400) that corresponds to a node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the source graph (30, 52, 304, 420, 500, 550), 2) identifying a second node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the base graph (10, 302, 400) that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) of the source graph (30, 52, 304, 420, 500, 550), and 3) identifying a third node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the source graph (30, 52, 304, 420, 500, 550) that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the base graph (10, 302, 400),in which identifying the first set of differences between the base graph (10, 302, 400) and the source graph (30, 52, 304, 420, 500, 550) includes identifying a difference between the first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the base graph (10, 302, 400) and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the source graph (30, 52, 304, 420, 500, 550), andin which identifying the difference between the first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) of the source graph (30, 52, 304, 420, 500, 550) includes identifying a difference between one or more of a parameter and an expression for a parameter of the first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and a parameter or an expression for a parameter of the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), andcomparing a specification of the base graph (10, 302, 400) and a specification of the target graph (40, 54, 60, 306, 440, 502) to identify a second set of differences between the base graph (10, 302, 400) and the target graph (40, 54, 60, 306, 440, 502), the second set of differences including information indicative of one or more of a second deleted node (16, 26, 32, 404, 406, 408, 422, 442), a second deleted link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), a second added node (16, 26, 32, 404, 406, 408, 422, 442), a second added link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), a second modified node (16, 26, 32, 404, 406, 408, 422, 442), or a second modified link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560);characterizing a correspondence between the differences in the first set of differences and the differences in the second set of differences, including identifying (i) a node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences, and/or (ii) a node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences;determining a set of combined differences based on the characterized correspondence, the first set of differences between the base graph (10, 302, 400) and the source graph (30, 52, 304, 420, 500, 550), and the second set of differences between the base graph (10, 302, 400) and the target graph (40, 54, 60, 306, 440, 502),in which determining the set of combined differences includes including, in the set of combined differences, (i) information indicative of the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences, and/or (ii) information indicative the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences that does not correspond to any node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences, andin which determining the set of combined differences includes:for a pair of differences determined to be corresponding,determining that the differences are compatible; andincluding information indicative of both differences of the pair in the set of combined differences, andin which determining the set of combined differences includes:for a pair of differences determined to be corresponding,determining that the differences are conflicting;receiving a selection of one of the conflicting differences of the pair; andincluding information indicative of the selected difference in the set of combined differences;wherein a pair of differences are conflicting if application of one of the differences to a copy of the base graph would prevent application of the other one of the differences to the copy;generating the updated dataflow graph (350, 450) based on the base graph (10, 302, 400) and the set of combined differences, in which generating the updated dataflow graph includes:generating a copy of the base graph (10, 302, 400); andapplying each difference in the set of combined differences to the copy of the base graph (10, 302, 400) to generate the updated dataflow graph (350, 450); andexecuting the updated dataflow graph (350, 450) to implement a graph-based computation performed on data read from a data source.
- The method of claim 1, in which the source graph (30, 52, 304, 420, 500, 550), the base graph (10, 302, 400), the target graph (40, 54, 60, 306, 440, 502), and the updated dataflow graph are executable dataflow graphs.
- The method of claim 1 or 2, in which the source graph (30, 52, 304, 420, 500, 550) is a first modified version of the base graph (10, 302, 400), and in which the target graph (40, 54, 60, 306, 440, 502) is a second modified version of the base graph (10, 302, 400)
- The method of any of the preceding claims, including generating the first set of differences and the second set of differences, each set of differences including, for each difference in the set:information identifying a type of the difference, in which the type of the difference includes one or more of a deletion, an addition, or a modification, andone or more of (i) information indicative of one or more nodes (16, 26, 32, 404, 406, 408, 422, 442) associated with the difference, including (a) information identifying a deleted, added, or modified node and one or more of (b) information identifying a node upstream of the deleted, added, or modified node and (c) information identifying a node downstream of the deleted, added, or modified node or (ii) information indicative of one or more links (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) associated with the difference, including one or more of (a) information identifying an added link and (b) information identifying a deleted link.
- The method of any of the preceding claims, in which the updated dataflow graph (350, 450) includes the nodes and links of the base graph, modified according to the set of combined differences.
- The method of any of the preceding claims, wherein characterizing the correspondence between the differences in the first set of differences and the differences in the second set of differences includes identifying a node or link identified in the first set of differences that corresponds to a node or link identified in the second set of differences, the method further including determining a compatibility between the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences in accordance with a compatibility analysis that determines whether a first difference is conflicting with a second difference.
- The method of claim 6, in which the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences includes a first modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences includes a second modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), and in which determining a compatibility includes:determining that a modification associated with the first modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) is compatible with a modification associated with the second modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560); andincluding, in the set of combined differences, information indicative of both the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences.
- The method of claim 6 or 7, in which the node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the first set of differences includes a first modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) identified in the second set of differences includes a second modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), and in which determining a compatibility includes:determining that a modification associated with the first modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) is not compatible with a modification associated with the second modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560);selecting the first modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), the second modified node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), or neither; andincluding information indicative of the selected node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) in the set of combined differences.
- The method of claim 1, including selecting one of the conflicting differences based on a selection criterion (324), and/or including:presenting, on a user interface (340), information indicative of the both conflicting differences of the pair; andselecting the one of the conflicting differences based on user input.
- The method of any of the preceding claims, in which identifying the difference between one or more of a parameter and an expression for a parameter of the first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and a parameter or an expression for a parameter of the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), includes:determining that a parameter is present in the corresponding node or link but is not present in the first node or link, ordetermining that a parameter is present in the first node or link but is not present in the corresponding node or link, ordetermining that a parameter present in the corresponding node or link is a modified version of a parameter present in the first node or link.
- The method of claim 1, in which identifying the difference between one or more of a parameter and an expression for a parameter of the first node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) and a parameter or an expression for a parameter of the corresponding node (16, 26, 32, 404, 406, 408, 422, 442) or link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560), includes:analyzing one or more of the expressions on the source code corresponding to the respective node; and/oranalyzing values of one or more of the parameters defined by the expressions, wherein the parameter values are obtained by evaluating the respective expression defining the parameter when the respective graph is instantiated.
- The method of any of the preceding claims, in which the base graph (10, 302, 400) contains a base subgraph and in which the source graph (30, 52, 304, 420, 500, 550) contains a first subgraph, and including: comparing a specification of the base subgraph and a specification of the first subgraph to identify one or more differences between the base subgraph and the first subgraph.
- The method of any of the preceding claims, in which the links (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) represent flows of data or control signals between nodes (16, 26, 32, 404, 406, 408, 422, 442).
- The method of any of the preceding claims, wherein the base graph (10, 302, 400), the source graph (30, 52, 304, 420, 500, 550), and the target graph (40, 54, 60, 306, 440, 502) include data processing graphs, control graphs, and/or plans.
- The method of any of the preceding claims, wherein the determining of the correspondence between the differences includes: identifying (1) differences that involve nodes (16, 26, 32, 404, 406, 408, 422, 442) or links (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) that are identified in only one of the first and second sets of differences and (2) differences that involve nodes (16, 26, 32, 404, 406, 408, 422, 442) or links (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) that are identified in both of the first and second sets of differences
- The method of any of the preceding claims, wherein the determining of the set of combined differences includes:for each difference of the first and second sets of differences that involves a node (16, 26, 32, 404, 406, 408, 422, 442) or a link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) that is identified in only one of the first and second sets of differences, information indicative of that difference is added to the set of combined differences, andfor each difference of the first and second sets of differences that involves a node (16, 26, 32, 404, 406, 408, 422, 442) or a link (14, 20, 24, 28, 410, 412, 416, 424, 426, 444, 446, 448, 552, 556, 560) that is identified in both of the first and second sets of differences, a compatibility analysis is performed.
- The method of claim 16, wherein the performing of the compatibility analysis includes:determining whether or not a first difference is conflicting with a second difference;providing a graphical user interface (600); anddisplaying, via the graphical user interface (600), information visually representing the pair of conflicting differences.
- The method of claim 17, including:in case of any pair of conflicting differences, resolving the conflict of the pair of conflicting differences by selecting one of the pair of conflicting differences according to a selection criterion (324), andadding information indicative of the selected difference the set of combined differences, or the method including: displaying, via the graphical user interface (600), one or more visual representations of one or more selections of a difference among the pair of conflicting differences and a visual representation of the respective updated dataflow graph that would result from the respective selections, preferably including: receiving, from a user and via the graphical user interface (600), an input including a selection of one of the visual representations the suggested one or more selections, wherein the selection criterion (324) is defined by the input.
- A non-transitory computer readable medium storing instructions for causing a computing system to perform the method of any one of the preceding claims.
- A computing system for generating an updated dataflow graph based on a base graph (10, 302, 400) including: one or more processors coupled to a memory, the one or more processors and memory configured to perform the method of any one of claims 1 to 18.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201862681395P | 2018-06-06 | ||
| US201816153320 | 2018-10-05 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| HK40040934A true HK40040934A (en) | 2021-08-06 |
| HK40040934B HK40040934B (en) | 2024-05-24 |
Family
ID=
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP3803571B1 (en) | Updating executable graphs | |
| US10901702B2 (en) | Managing interfaces for sub-graphs | |
| EP2633398B1 (en) | Managing data set objects in a dataflow graph that represents a computer program | |
| US20170177740A1 (en) | Sub-graph interface generation | |
| CN115292160B (en) | Application testing | |
| AU2021201363B2 (en) | Format-specific data processing operations | |
| HK40040934A (en) | Updating executable graphs | |
| HK40040934B (en) | Updating executable graphs | |
| US20250181486A1 (en) | Automated identification and migration of input and baseline test data | |
| US12517717B2 (en) | Automated modification of computer programs | |
| WO2025117946A1 (en) | Automated identification and migration of input and baseline test data | |
| HK1262815B (en) | Format-specific data processing operations | |
| HK1262815A1 (en) | Format-specific data processing operations | |
| HK1183722B (en) | Managing data set objects in a dataflow graph that represents a computer program | |
| HK1183722A (en) | Managing data set objects in a dataflow graph that represents a computer program |