Manta Flow Integration Configuration
It is possible to configure common parts of Manta Flow exports, enabling export customization to fit particular customer/user needs. This section describes the configuration entries used across individual integration exports. Specifics about the configurations for individual integrations are described in the respective sections of the documentation.
The common configurations are placed in the file
mantaflow/server/webapps/manta-dataflow-server/WEB-INF/classes/*technology*-config.json
. If you want to override a dialect, copy the whole section related to the specific dialect from this file to
mantaflow/server/webapps/manta-dataflow-server/WEB-INF/conf/*technology*-config.json
and change the evaluators to fit your needs. Open Manta and Alation can be configured this way. See the practical examples at the end of this section
for information and ideas on how to customize the exports.
You can override just a specific part of the dialect’s configuration; for example, a single evaluator or any other dialect configuration property. You don’t need to copy the whole dialect section.
For Open Manta, you can configure other export configuration properties besides evaluators. These are listed in the section “Other export configuration properties” below.
Evaluators
There are two main concepts used: Evaluators and Predicates.
It is possible to modify evaluators for each dialect in each export technology.
Evaluators
Evaluators determine whether a node should be exported or not. As IBM Manta Data Lineage and target solution models are usually quite different, the export configuration is fairly complex and there are many evaluators used.
Each evaluator is defined by using vertex predicates, which define if the evaluator is true or false on the given node.
Evaluator |
Description |
Default value |
---|---|---|
|
Evaluator to determine if the node is a target
node of the flow on the column level. For example, in
the case of databases, the target node type is typically
|
False |
|
Evaluator to determine if the node is a source node of the flow on the column level. For example, in the case of databases, the source node type is typically
|
False |
|
Evaluator to determine if the node is a leaf of a report. For example, report leaves are nodes of the types
|
False |
|
Evaluator to determine if the node is a leaf of a transformation. Typically, a transformation leaf is a node of the type |
False |
|
Evaluator to determine if there is a location leaf in the node’s hierarchy. This is by default used for Oracle dialect where |
False |
|
Evaluator to determine which of the parents of the transformation leaf is used to determine the transformation’s name. For example: |
False |
|
Evaluator to determine whether the target* node is optional for the given transformation node. If this evaluator determines that the target node is required and the transformation does not have a target node, the transformation’s flow will not be exported. By default, target nodes are typically not required for transformation nodes like Note that some third-party tools do not accept flows without at least one source and target node. In this case, this evaluator does not apply.
|
False |
|
Evaluator to determine which ancestors should NOT be included in the full name. This evaluator applies to the exclusion of nodes in a hierarchy that are irrelevant to the export. Important: Note that the default setting change may make the exported data inconsistent with the third-party tool’s meta model. This state may break the export.
|
False |
|
Evaluator to determine if it is a script node to be connected via an enum link. This evaluator is no longer applicable and will be removed in the future.
|
False |
|
Helper evaluator for obtaining the table-level ancestor of the given column node. Typically, the table-level node is a |
False |
|
Evaluator to determine which nodes are exported as “outer” nodes; that is, nodes usually imported by third-party tools through their native interface. For compatibility reasons, use this evaluator in correlation with
outerNodeEvaluator .
|
True |
|
Evaluator to determine if the transformation node should be skipped to connect the source and destination directly. For example, this evaluator applies when a direct connection between
|
False |
|
Evaluator to determine which nodes are exported as “inner” nodes; that is, nodes provided exclusively by Manta Data Lineage, in addition to the ones imported by third-party tools through their native interface. |
True |
|
Evaluator to determine which nodes are exported as “outer” nodes; that is, nodes usually imported by third-party tools through their native interface. For compatibility reasons, use this evaluator in correlation with
printEnumeratedLinksEvaluator .
|
False |
|
Evaluator to determine whether this dialects supports transformation classification export; that is, export of the flag noting whether the transformation node transforms data or not. Important: Only
TruePredicate and FalsePredicate are supported; otherwise, the export may crash.
|
False |
|
Evaluator to determine whether the node is exported as its descendant’s qualified name entry instead of third-party tool asset. Important: If evaluates to
true for the node, the node type must be mapped to QUALIFIED_NAME_ENTRY , otherwise the export won't work. For more information, see the typeMapping configuration property in Other Export Configuration Properties.
Example: |
False |
* For technical and historical reasons, startNodeEvaluator
determines target nodes and
endNodeEvaluator
source nodes.
Predicates
Predicates are the building blocks of evaluators. They stop at each node and determine if it meets the conditions specified. Examples of evaluators and their predicates can be seen in
mantaflow/server/webapps/manta-dataflow-server/WEB-INF/classes/*technology*-config.json
.
Predicate |
Structure |
Description |
---|---|---|
TruePredicate |
Returns True |
|
FalsePredicate |
Returns False |
|
NotPredicate |
|
Returns the opposite of the
|
AndPredicate |
|
When all children return true, returns True |
OrPredicate |
|
When at least one child returns true, returns True |
ChildTypePredicate |
|
Returns True when one of the children is of the allowed type |
InChildHierarchyTypePredicate |
|
Returns True if and only if all the descendants of the node are of the allowed types |
InHierarchyPredicate |
|
Returns True if the node or one of its parents matches all the evaluators in the children list |
InHierarchyPropertyPredicate |
|
Returns True if somewhere in the hierarchy of the node is a node of a given type with a given property having a given value |
InHierarchyTypePredicate |
|
Returns True if and only if the vertex has an ancestor of an allowed type |
IsLeafPredicate |
Returns True if the node has no children |
|
LeafSinkPredicate |
|
Returns True if all leaves of the node are sinks (has no edges of the specified labels) |
NamePredicate |
|
Returns True if the name of the node is in the |
ParentAttributePredicate |
|
Returns True if the parent of the node has an attribute with the given key located in the given set of allowable values |
ParentTypePredicate |
|
Returns True if the parent of the node is a type from the |
ResourceTypePredicate |
|
Returns True if the resource of the node is from the |
SinkPredicate |
|
Returns True if the node is sink (has no edges of the specified labels) |
TableAttributePredicate |
|
Returns True if the node is a column in the table and, additionally, this table has an attribute with the given key located in the given set of allowable values |
TableSourcePredicate |
|
Returns True if the node is a column in the table and, additionally, this table has a source (
|
TableTypePredicate |
|
Returns True if the node is a column in the table and, additionally, this table is a type located in the given set of allowable types |
VertexAttributePredicate |
|
Returns True if the node has an attribute with the given key and a value from the set of allowed values |
VertexPropertyPredicate |
|
Returns True if the value of the vertex property belongs to the specified set Removed as of R42 To retrieve a name, use NamePredicate instead To retrieve a type, use VertexTypePredicate instead |
VertexTypePredicate |
|
Returns True if the type of the vertex is from the allowed set |
Example
Example of the configuration of the dialects for Manta Open Integration Export.
Practical Examples of Configuration Overrides
This section describes selected use cases where configuration overrides apply.
Deduced Table Export
By default, deduced tables, views, and synonyms are typically not exported. The default MS SQL dialect configuration for Open Manta Integration Export is:
"mssql": {
"startNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableTypePredicate",
"typeSet": [
"VOLATILE_TABLE",
"GLOBAL_TEMPORARY_TABLE"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableSourcePredicate",
"typeSet": [
"DEDUCTION"
]
}
}
]
},
"endNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableTypePredicate",
"typeSet": [
"VOLATILE_TABLE",
"GLOBAL_TEMPORARY_TABLE"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableSourcePredicate",
"typeSet": [
"DEDUCTION"
]
}
}
]
},
...
To enable deduced object export, remove the predicate disabling this from the startNodeEvaluator
and endNodeEvaluator
.
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableSourcePredicate",
"typeSet": [
"DEDUCTION"
]
}
}
So the target configuration is:
"mssql": {
"startNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableTypePredicate",
"typeSet": [
"VOLATILE_TABLE",
"GLOBAL_TEMPORARY_TABLE"
]
}
}
]
},
"endNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableTypePredicate",
"typeSet": [
"VOLATILE_TABLE",
"GLOBAL_TEMPORARY_TABLE"
]
}
}
]
},
...
Volatile and Temporary Table Export
By default, volatile and temporary tables are typically not exported. To enable this, remove the appropriate predicates from the abovementioned default configuration.
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableTypePredicate",
"typeSet": [
"VOLATILE_TABLE",
"GLOBAL_TEMPORARY_TABLE"
]
}
}
So the target configuration is:
"mssql": {
"startNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableSourcePredicate",
"typeSet": [
"DEDUCTION"
]
}
}
]
},
"endNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "VertexTypePredicate",
"valueSet": [
"Pseudocolumn"
]
}
},
{
"type": "NotPredicate",
"vertexPredicate": {
"type": "TableSourcePredicate",
"typeSet": [
"DEDUCTION"
]
}
}
]
},
...
Export Transformations without Sources and Targets
If the third-party tool enables it, source nodes are not required for transformation export. Target nodes are typically required with the exceptions defined by the startNodeOptional
evaluator (see above). The
default MS SQL dialect configuration for Open Manta Integration Export is:
"mssql": {
...
"startNodeOptionalEvaluator": {
"type": "ParentTypePredicate",
"typeSet": [
"Query",
"Delete",
"DropTableOrView"
]
},
...
To enable export without target nodes for all transformations, replace this predicate with TruePredicate
.
"mssql": {
...
"startNodeOptionalEvaluator": {
"type": "TruePredicate"
},
...
Export with Certain Types of Nodes Skipped (e.g., Views)
In this case, we need to remove the node type from the start node and end node evaluator.
If the original configuration is like this:
"mssql": {
"detailedLineagePolicy": "SOURCE_TO_TARGET",
"startNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"View",
"Synonym"
]
},
...
We can set the configuration to:
"mssql": {
"detailedLineagePolicy": "SOURCE_TO_TARGET",
"startNodeEvaluator": {
"type": "AndPredicate",
"children": [
{
"type": "ParentTypePredicate",
"typeSet": [
"Table",
"Synonym"
]
},
...
Other Export Configuration Properties
The following export configuration properties are configurable for Open Manta export.
Configuration property |
Type |
Description |
Default value |
---|---|---|---|
|
A JSON object with internal lineage node types as keys and names for export as values |
Mapping of internal lineage node types into names for export Example: |
An empty object |
|
A JSON object with the following properties
|
Mapping of internal lineage node types into names for export, applied if the defined condition is met
Example: It can express the condition like this.
|
An empty collection |
|
|
It is only taken into account if detailed lineage is enabled in the global settings of Manta Data Lineage to IEDC.
|
|
|
An object with the following parameters
|
Configuration of the node types that the source codes are loaded for. It has two parameters.
|
An object with the following:
|
|
An object with the following parameters
|
It has the same structure as
There’s an abstract layer of the type “input” (from IEDC terminology) where nodes of types such as procedures, triggers, scripts, and ETL transformations belong. If this feature is enabled (see the
Example: In this case, for the And for a node of the type Enable input-level source code export:
|
An object with the following:
|
|
A list of objects with the following properties
|
Configuration of the artificial parent for nodes defined by the condition
|
An empty collection |
|
An object representing the map with the node type as the key and a name resolver configuration object with the following properties
If the resolver type is
|
There are two types of name resolvers:
Namespace including resolver: We can configure it so that some nodes will not be exported. But the concept of namespaces exists so we don’t have to lose all the information from the excluded nodes. This configuration property defines which ancestors will be included in the node namespace. There are two strategies:
|
An empty mapping object If a name resolver mapping is configured with the resolver type
|
|
An object specifying the type of connection resolver and its properties. It has the following properties.
OrConnection type properties:
ConnectionByNodeType properties:
ConnectionByAttribute properties:
|
A resolver of a connection that a lineage node belongs to In the stored data, the connection information can be stored in different ways. If the hierarchy is something like
This configuration defines where the connection information is stored.
|
|
|
An array of allowed dialect names (case insensitive) |
The locations (transformations) in any dialect can have source or target nodes in another dialect (e.g., ETL transformations can have any database as a source or target). For the given dialect, this configuration defines a list of dialects that nodes of this dialect can be exported for as a source or target of the transformation. The purpose of this configuration is to limit the lineage export. If the dialect has this configuration property configured as an empty array (usually for databases), the dialect can be exported as a target or source of the locations (transformations) of all dialects. Example: For SSAS, For MS SQL,
Note: This logic is applied in both directions — to both incoming and outgoing edges. |
An empty array — allowing the dialect to be exported as a source or target of the locations for all dialects |
|
An array containing keys of node attributes |
Available only for Open Manta Integration Export
This property configures which node attributes can be exported in the transformation_expression column. For more information, see Structure of Exported Files. If the object has at least one of the configured attributes, then the topmost attribute will be exported. If there are no configured transformation attributes or the object does not have any of the configured attributes, the transformation_expression column can contain transformation logic or the source code, if there is any. Example: |
Each ETL and reporting tool has its own default values. |
Collibra Asset Export Configuration
It’s possible to change the configuration of the asset and attribute mapping for Collibra. The configuration can be changed by changing the JSON file, which can be found in ADMIN GUI > Configuration > Integrations > Collibra > Collibra Asset Export Configuration.
Group |
Description |
Example |
---|---|---|
|
JSON object that maps Manta Data Lineage internal model nodes into Collibra types
|
|
|
JSON object that maps Manta Data Lineage types into the internal node representation used by Manta Data Lineage for exports to Collibra which is further used in Asset type mappings are separated into groups based on the technology types such as |
|
|
JSON object with an array that declares how attributes from Manta Data Lineage are mapped into Collibra attribute types
Value Converters
|
or |