You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by am...@apache.org on 2019/11/06 22:26:57 UTC

[atlas] 02/02: ATLAS-3451 Export API connected export mismatch for lineage of entities from different DBs

This is an automated email from the ASF dual-hosted git repository.

amestry pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit f78f2f32d66b024b6b133483e46dbe578f3d37bd
Author: nikhilbonte <ni...@freestoneinfotech.com>
AuthorDate: Mon Oct 7 19:20:10 2019 +0530

    ATLAS-3451 Export API connected export mismatch for lineage of entities from different DBs
    
    Signed-off-by: nixonrodrigues <ni...@apache.org>
---
 .../impexp/RelationshipAttributesExtractor.java    |  79 ++++--
 .../RelationshipAttributesExtractorTest.java       |  65 ++++-
 .../resources/json/entities/column-lineage.json    |  89 +++++++
 .../src/test/resources/json/entities/db1.json      |  27 ++
 .../src/test/resources/json/entities/db2.json      |  27 ++
 .../resources/json/entities/table-lineage.json     | 240 ++++++++++++++++++
 .../src/test/resources/json/entities/table1.json   | 276 +++++++++++++++++++++
 .../src/test/resources/json/entities/table2.json   | 276 +++++++++++++++++++++
 8 files changed, 1049 insertions(+), 30 deletions(-)

diff --git a/repository/src/main/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractor.java b/repository/src/main/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractor.java
index d609071..d8b0a20 100644
--- a/repository/src/main/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractor.java
+++ b/repository/src/main/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractor.java
@@ -19,7 +19,9 @@ package org.apache.atlas.repository.impexp;
 
 import org.apache.atlas.model.instance.AtlasEntity;
 import org.apache.atlas.model.instance.AtlasRelatedObjectId;
+import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
 import org.apache.atlas.model.typedef.AtlasEntityDef;
+import org.apache.atlas.repository.impexp.ExportService.TraversalDirection;
 import org.apache.atlas.type.AtlasTypeRegistry;
 import org.apache.atlas.type.AtlasTypeUtil;
 import org.slf4j.Logger;
@@ -29,6 +31,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import static org.apache.atlas.repository.impexp.ExportService.ExportContext;
+import static org.apache.atlas.repository.impexp.ExportService.TraversalDirection.BOTH;
+import static org.apache.atlas.repository.impexp.ExportService.TraversalDirection.INWARD;
+import static org.apache.atlas.repository.impexp.ExportService.TraversalDirection.OUTWARD;
+import static org.apache.atlas.repository.impexp.ExportService.TraversalDirection.UNKNOWN;
+
 public class RelationshipAttributesExtractor implements ExtractStrategy {
 
     private static final Logger LOG = LoggerFactory.getLogger(RelationshipAttributesExtractor.class);
@@ -40,7 +48,7 @@ public class RelationshipAttributesExtractor implements ExtractStrategy {
     }
 
     @Override
-    public void fullFetch(AtlasEntity entity, ExportService.ExportContext context) {
+    public void fullFetch(AtlasEntity entity, ExportContext context) {
         if (LOG.isDebugEnabled()) {
             LOG.debug("==> fullFetch({}): guidsToProcess {}", AtlasTypeUtil.getAtlasObjectId(entity), context.guidsToProcess.size());
         }
@@ -53,7 +61,7 @@ public class RelationshipAttributesExtractor implements ExtractStrategy {
             if (context.skipLineage && isLineage) {
                 continue;
             }
-            context.addToBeProcessed(isLineage, ar.getGuid(), ExportService.TraversalDirection.BOTH);
+            context.addToBeProcessed(isLineage, ar.getGuid(), BOTH);
         }
 
         if (LOG.isDebugEnabled()) {
@@ -62,31 +70,24 @@ public class RelationshipAttributesExtractor implements ExtractStrategy {
     }
 
     @Override
-    public void connectedFetch(AtlasEntity entity, ExportService.ExportContext context) {
+    public void connectedFetch(AtlasEntity entity, ExportContext context) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> connectedFetch({}): guidsToProcess {} isSkipConnectedFetch :{}", AtlasTypeUtil.getAtlasObjectId(entity), context.guidsToProcess.size(), context.isSkipConnectedFetch);
+            LOG.debug("==> connectedFetch({}): guidsToProcess {}", AtlasTypeUtil.getAtlasObjectId(entity), context.guidsToProcess.size());
         }
 
-        List<AtlasRelatedObjectId> atlasRelatedObjectIdList = getRelatedObjectIds(entity);
-        for (AtlasRelatedObjectId ar : atlasRelatedObjectIdList) {
-            boolean isLineage = isLineageType(ar.getTypeName());
+        ExportService.TraversalDirection direction = context.guidDirection.get(entity.getGuid());
 
-            if (context.skipLineage && isLineage) {
-                continue;
+        if (direction == null || direction == UNKNOWN) {
+            addToBeProcessed(entity, context, OUTWARD, INWARD);
+        } else {
+            if (isLineageType(entity.getTypeName())) {
+                direction = OUTWARD;
             }
-            if (!context.isSkipConnectedFetch || isLineage) {
-                context.addToBeProcessed(isLineage, ar.getGuid(), ExportService.TraversalDirection.BOTH);
-            }
-        }
-
-        if(isLineageType(entity.getTypeName())){
-            context.isSkipConnectedFetch = false;
-        }else{
-            context.isSkipConnectedFetch = true;
+            addToBeProcessed(entity, context, direction);
         }
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> connectedFetch({}): guidsToProcess {}, isSkipConnectedFetch :{}", AtlasTypeUtil.getAtlasObjectId(entity), context.guidsToProcess.size(), context.isSkipConnectedFetch);
+            LOG.debug("==> connectedFetch({}): guidsToProcess {}", AtlasTypeUtil.getAtlasObjectId(entity), context.guidsToProcess.size());
         }
     }
 
@@ -94,9 +95,46 @@ public class RelationshipAttributesExtractor implements ExtractStrategy {
     public void close() {
     }
 
+    private void addToBeProcessed(AtlasEntity entity, ExportContext context, TraversalDirection... directions) {
+        if (directions == null || directions.length == 0) {
+            return;
+        }
+
+        boolean isLineageEntity = isLineageType(entity.getTypeName());
+        List<AtlasRelatedObjectId> relatedObjectIds = getRelatedObjectIds(entity);
+
+        for (TraversalDirection direction : directions) {
+            for (AtlasRelatedObjectId id : relatedObjectIds) {
+                String guid = id.getGuid();
+                TraversalDirection currentDirection = context.guidDirection.get(guid);
+                boolean isLineageId = isLineageType(id.getTypeName());
+                TraversalDirection edgeDirection = getRelationshipEdgeDirection(id, entity.getTypeName());
+
+                if (context.skipLineage && isLineageId) continue;
+
+                if (!isLineageEntity && direction != edgeDirection ||
+                        isLineageEntity && direction == edgeDirection)
+                    continue;
+
+                if (currentDirection == null) {
+                    context.addToBeProcessed(isLineageId, guid, direction);
+
+                } else if (currentDirection == OUTWARD && direction == INWARD) {
+                    context.guidsProcessed.remove(guid);
+                    context.addToBeProcessed(isLineageId, guid, direction);
+                }
+            }
+        }
+    }
+
+    private TraversalDirection getRelationshipEdgeDirection(AtlasRelatedObjectId relatedObjectId, String entityTypeName) {
+        boolean isOutEdge = typeRegistry.getRelationshipDefByName(relatedObjectId.getRelationshipType()).getEndDef1().getType().equals(entityTypeName);
+        return isOutEdge ? OUTWARD : INWARD;
+    }
+
     private boolean isLineageType(String typeName) {
         AtlasEntityDef entityDef = typeRegistry.getEntityDefByName(typeName);
-        return entityDef.getSuperTypes().contains("Process");
+        return entityDef.getSuperTypes().contains(AtlasBaseTypeDef.ATLAS_TYPE_PROCESS);
     }
 
     private List<AtlasRelatedObjectId> getRelatedObjectIds(AtlasEntity entity) {
@@ -109,7 +147,6 @@ public class RelationshipAttributesExtractor implements ExtractStrategy {
                 relatedObjectIds.addAll((List) o);
             }
         }
-
         return relatedObjectIds;
     }
 }
diff --git a/repository/src/test/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractorTest.java b/repository/src/test/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractorTest.java
index 920fc28..a1b512f 100644
--- a/repository/src/test/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractorTest.java
+++ b/repository/src/test/java/org/apache/atlas/repository/impexp/RelationshipAttributesExtractorTest.java
@@ -26,6 +26,7 @@ import org.apache.atlas.model.impexp.AtlasExportResult;
 import org.apache.atlas.model.instance.AtlasEntity;
 import org.apache.atlas.model.instance.AtlasObjectId;
 import org.apache.atlas.repository.graph.AtlasGraphProvider;
+import org.apache.atlas.repository.store.graph.v2.AtlasEntityStoreV2;
 import org.apache.atlas.runner.LocalSolrRunner;
 import org.apache.atlas.store.AtlasTypeDefStore;
 import org.apache.atlas.type.AtlasTypeRegistry;
@@ -48,26 +49,45 @@ import java.util.ArrayList;
 import java.util.HashMap;
 
 import static org.apache.atlas.graph.GraphSandboxUtil.useLocalSolr;
-import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.*;
-import static org.testng.Assert.*;
+import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.getZipSource;
+import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.loadModelFromJson;
+import static org.apache.atlas.repository.impexp.ZipFileResourceTestUtils.runImportWithNoParameters;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 
 @Guice(modules = TestModules.TestOnlyModule.class)
-public class RelationshipAttributesExtractorTest {
+public class RelationshipAttributesExtractorTest extends ExportImportTestBase {
 
-    private static final String EXPORT_FULL = "full";
+    private static final String EXPORT_FULL      = "full";
     private static final String EXPORT_CONNECTED = "connected";
-    private static final String QUALIFIED_NAME_DB = "db_test_1@02052019";
-    private static final String QUALIFIED_NAME_TABLE_LINEAGE = "db_test_1.test_tbl_ctas_2@02052019";
+    private static final String ENTITIES_SUB_DIR = "entities";
+
+    private static final String QUALIFIED_NAME_DB                = "db_test_1@02052019";
+    private static final String QUALIFIED_NAME_TABLE_LINEAGE     = "db_test_1.test_tbl_ctas_2@02052019";
     private static final String QUALIFIED_NAME_TABLE_NON_LINEAGE = "db_test_1.test_tbl_1@02052019";
 
-    private static final String GUID_DB = "f0b72ab4-7452-4e42-ac74-2aee7728cce4";
-    private static final String GUID_TABLE_1 = "4d5adf00-2c9b-4877-ad23-c41fd7319150";
-    private static final String GUID_TABLE_2 = "8d0b834c-61ce-42d8-8f66-6fa51c36bccb";
+    private static final String GUID_DB           = "f0b72ab4-7452-4e42-ac74-2aee7728cce4";
+    private static final String GUID_TABLE_1      = "4d5adf00-2c9b-4877-ad23-c41fd7319150";
+    private static final String GUID_TABLE_2      = "8d0b834c-61ce-42d8-8f66-6fa51c36bccb";
     private static final String GUID_TABLE_CTAS_2 = "eaec545b-3ac7-4e1b-a497-bd4a2b6434a2";
     private static final String GUID_HIVE_PROCESS = "bd3138b2-f29e-4226-b859-de25eaa1c18b";
 
+    private static final String DB1                 = "db1";
+    private static final String DB2                 = "db2";
+    private static final String TBL1                = "table1";
+    private static final String TBL2                = "table2";
+    private static final String HIVE_PROCESS        = "table-lineage";
+    private static final String HIVE_COLUMN_LINEAGE = "column-lineage";
+
+    private static final String GUID_DB1            = "1c4e939e-ff6b-4229-92a4-b60c00deb547";
+    private static final String GUID_DB2            = "77c3bccf-ca3f-42e7-b2dd-f5a35f63eea6";
+    private static final String GUID_TBL1           = "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e";
+    private static final String GUID_TBL2           = "b8cbc39f-4467-429b-a7fe-4ba2c28cceca";
+    private static final String GUID_PROCESS        = "caf7f40a-b334-4f9e-9bf2-f24ce43db47f";
+    private static final String GUID_COLUMN_LINEAGE = "d4cf482b-423c-4c88-9bd1-701477ed6fd8";
+
     @Inject
     private ImportService importService;
 
@@ -80,6 +100,9 @@ public class RelationshipAttributesExtractorTest {
     @Inject
     private ExportService exportService;
 
+    @Inject
+    private AtlasEntityStoreV2 entityStore;
+
     @BeforeClass
     public void setup() throws IOException, AtlasBaseException {
         loadBaseModel();
@@ -183,6 +206,22 @@ public class RelationshipAttributesExtractorTest {
         verifyTableWithoutLineageSkipLineageConn(source);
     }
 
+    @Test
+    public void interDbLineageConnectedExportTest() throws Exception {
+        setupInterDbLineageData();
+
+        ZipSource source = runExport(getExportRequestForHiveTable("db_1.table_1@cl1", EXPORT_CONNECTED, false));
+        assertInterDbLineageConnectedExport(source);
+    }
+
+    private void setupInterDbLineageData() {
+        RequestContext.get().setImportInProgress(true);
+        createEntities(entityStore, ENTITIES_SUB_DIR, new String[]{DB1, DB2, TBL1, TBL2, HIVE_PROCESS, HIVE_COLUMN_LINEAGE});
+        final String[] entityGuids = {GUID_DB1, GUID_DB2, GUID_TBL1, GUID_TBL2, GUID_PROCESS, GUID_COLUMN_LINEAGE};
+        verifyCreatedEntities(entityStore, entityGuids, 6);
+        RequestContext.get().setImportInProgress(false);
+    }
+
     private void loadHiveModel() throws IOException, AtlasBaseException {
         loadModelFromJson("1000-Hadoop/1030-hive_model.json", typeDefStore, typeRegistry);
     }
@@ -334,6 +373,14 @@ public class RelationshipAttributesExtractorTest {
         verifyExpectedEntities(getFileNames(zipSource), GUID_DB, GUID_TABLE_1);
     }
 
+    private void assertInterDbLineageConnectedExport(ZipSource zipSource) {
+        assertNotNull(zipSource.getCreationOrder());
+        assertEquals(zipSource.getCreationOrder().size(), 5);
+
+        assertTrue(zipSource.getCreationOrder().contains(GUID_PROCESS));
+        verifyExpectedEntities(getFileNames(zipSource), GUID_DB1, GUID_DB2, GUID_TBL1, GUID_TBL2, GUID_PROCESS);
+    }
+
     private void verifyExpectedEntities(List<String> fileNames, String... guids){
         assertEquals(fileNames.size(), guids.length);
         for (String guid : guids) {
diff --git a/repository/src/test/resources/json/entities/column-lineage.json b/repository/src/test/resources/json/entities/column-lineage.json
new file mode 100644
index 0000000..a98122d
--- /dev/null
+++ b/repository/src/test/resources/json/entities/column-lineage.json
@@ -0,0 +1,89 @@
+{
+  "entity": {
+    "attributes": {
+      "depenendencyType": "SIMPLE",
+      "description": null,
+      "expression": null,
+      "inputs": [
+        {
+          "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+          "typeName": "hive_column",
+          "uniqueAttributes": {
+            "qualifiedName": "db_1.table_1.id@cl1"
+          }
+        }
+      ],
+      "name": "db_2.table_2@cl1:1569932823000:id",
+      "outputs": [
+        {
+          "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+          "typeName": "hive_column",
+          "uniqueAttributes": {
+            "qualifiedName": "db_2.table_2.id@cl1"
+          }
+        }
+      ],
+      "owner": null,
+      "qualifiedName": "db_2.table_2@cl1:1569932823000:id",
+      "query": {
+        "guid": "9827e05b-7f56-4eeb-8ce5-2ebc2f1bd001",
+        "typeName": "hive_process"
+      },
+      "replicatedFrom": null,
+      "replicatedTo": null
+    },
+    "createTime": 1570087822414,
+    "createdBy": "hive",
+    "guid": "d4cf482b-423c-4c88-9bd1-701477ed6fd8",
+    "isIncomplete": false,
+    "relationshipAttributes": {
+      "inputs": [
+        {
+          "displayText": "id",
+          "entityStatus": "ACTIVE",
+          "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+          "relationshipAttributes": {
+            "typeName": "dataset_process_inputs"
+          },
+          "relationshipGuid": "4cce3e95-f780-4d8f-ab41-74d64dc91e23",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "dataset_process_inputs",
+          "typeName": "hive_column"
+        }
+      ],
+      "meanings": [],
+      "outputs": [
+        {
+          "displayText": "id",
+          "entityStatus": "ACTIVE",
+          "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+          "relationshipAttributes": {
+            "typeName": "process_dataset_outputs"
+          },
+          "relationshipGuid": "b0054651-7003-4de9-a9f6-49ef7c0b0616",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "process_dataset_outputs",
+          "typeName": "hive_column"
+        }
+      ],
+      "query": {
+        "displayText": "create table db_2.table_2 as select * from db_1.table_1",
+        "entityStatus": "ACTIVE",
+        "guid": "9827e05b-7f56-4eeb-8ce5-2ebc2f1bd001",
+        "relationshipAttributes": {
+          "typeName": "hive_process_column_lineage"
+        },
+        "relationshipGuid": "ad56ea7f-8556-421d-8979-7eaf79dd0050",
+        "relationshipStatus": "ACTIVE",
+        "relationshipType": "hive_process_column_lineage",
+        "typeName": "hive_process"
+      }
+    },
+    "status": "ACTIVE",
+    "typeName": "hive_column_lineage",
+    "updateTime": 1570087822414,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {}
+}
\ No newline at end of file
diff --git a/repository/src/test/resources/json/entities/db1.json b/repository/src/test/resources/json/entities/db1.json
new file mode 100644
index 0000000..c1a670f
--- /dev/null
+++ b/repository/src/test/resources/json/entities/db1.json
@@ -0,0 +1,27 @@
+{
+  "entity": {
+    "attributes": {
+      "clusterName": "cl1",
+      "description": null,
+      "location": "hdfs://localhost:8020/warehouse/tablespace/managed/hive/db_1.db",
+      "name": "db_1",
+      "owner": "hive",
+      "ownerType": "USER",
+      "parameters": {},
+      "qualifiedName": "db_1@cl1",
+      "replicatedFrom": null,
+      "replicatedTo": null
+    },
+    "createTime": 1570444587942,
+    "createdBy": "hive",
+    "guid": "1c4e939e-ff6b-4229-92a4-b60c00deb547",
+    "isIncomplete": false,
+    "relationshipAttributes": {},
+    "status": "ACTIVE",
+    "typeName": "hive_db",
+    "updateTime": 1570444591401,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {}
+}
\ No newline at end of file
diff --git a/repository/src/test/resources/json/entities/db2.json b/repository/src/test/resources/json/entities/db2.json
new file mode 100644
index 0000000..d71c707
--- /dev/null
+++ b/repository/src/test/resources/json/entities/db2.json
@@ -0,0 +1,27 @@
+{
+  "entity": {
+    "attributes": {
+      "clusterName": "cl1",
+      "description": null,
+      "location": "hdfs://localhost:8020/warehouse/tablespace/managed/hive/db_2.db",
+      "name": "db_2",
+      "owner": "hive",
+      "ownerType": "USER",
+      "parameters": {},
+      "qualifiedName": "db_2@cl1",
+      "replicatedFrom": null,
+      "replicatedTo": null
+    },
+    "createTime": 1570444593617,
+    "createdBy": "hive",
+    "guid": "77c3bccf-ca3f-42e7-b2dd-f5a35f63eea6",
+    "isIncomplete": false,
+    "relationshipAttributes": {},
+    "status": "ACTIVE",
+    "typeName": "hive_db",
+    "updateTime": 1570444602640,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {}
+}
\ No newline at end of file
diff --git a/repository/src/test/resources/json/entities/table-lineage.json b/repository/src/test/resources/json/entities/table-lineage.json
new file mode 100644
index 0000000..40834bc
--- /dev/null
+++ b/repository/src/test/resources/json/entities/table-lineage.json
@@ -0,0 +1,240 @@
+{
+  "entity": {
+    "attributes": {
+      "clusterName": null,
+      "description": null,
+      "endTime": 0,
+      "inputs": [
+        {
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "typeName": "hive_table",
+          "uniqueAttributes": {
+            "qualifiedName": "db_1.table_1@cl1"
+          }
+        }
+      ],
+      "name": "create table db_2.table_2 as select * from db_1.table_1",
+      "operationType": "CREATETABLE_AS_SELECT",
+      "outputs": [
+        {
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "typeName": "hive_table",
+          "uniqueAttributes": {
+            "qualifiedName": "db_2.table_2@cl1"
+          }
+        }
+      ],
+      "owner": null,
+      "qualifiedName": "db_2.table_2@cl1:1570444602000",
+      "queryGraph": null,
+      "queryId": "",
+      "queryPlan": "Not Supported",
+      "queryText": "",
+      "recentQueries": [
+        "create table db_2.table_2 as select * from db_1.table_1"
+      ],
+      "replicatedFrom": null,
+      "replicatedTo": null,
+      "startTime": 0,
+      "userName": ""
+    },
+    "createTime": 1570444602640,
+    "createdBy": "hive",
+    "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+    "isIncomplete": false,
+    "relationshipAttributes": {
+      "columnLineages": [
+        {
+          "displayText": "db_2.table_2@cl1:1570444602000:id",
+          "entityStatus": "ACTIVE",
+          "guid": "52b4662b-999d-4f63-a977-89bc9ea8ff46",
+          "relationshipAttributes": {
+            "typeName": "hive_process_column_lineage"
+          },
+          "relationshipGuid": "26c9dec4-f3c9-4a17-82df-7156d68568f4",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_process_column_lineage",
+          "typeName": "hive_column_lineage"
+        }
+      ],
+      "inputs": [
+        {
+          "displayText": "table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "relationshipAttributes": {
+            "typeName": "dataset_process_inputs"
+          },
+          "relationshipGuid": "69a92de6-2ff0-48bf-821a-5be9b3605aea",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "dataset_process_inputs",
+          "typeName": "hive_table"
+        }
+      ],
+      "meanings": [],
+      "outputs": [
+        {
+          "displayText": "table_2",
+          "entityStatus": "ACTIVE",
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "relationshipAttributes": {
+            "typeName": "process_dataset_outputs"
+          },
+          "relationshipGuid": "d38c4409-65c4-4ba4-99bb-c655d8be8197",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "process_dataset_outputs",
+          "typeName": "hive_table"
+        }
+      ],
+      "processExecutions": [
+        {
+          "displayText": "create table db_2.table_2 as select * from db_1.table_1:1570444589240",
+          "entityStatus": "ACTIVE",
+          "guid": "10a024a4-cb38-450b-a601-0106ffb758ad",
+          "relationshipAttributes": {
+            "typeName": "hive_process_process_executions"
+          },
+          "relationshipGuid": "e40f8127-3415-4c3e-ac7e-424d3349f116",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_process_process_executions",
+          "typeName": "hive_process_execution"
+        }
+      ]
+    },
+    "status": "ACTIVE",
+    "typeName": "hive_process",
+    "updateTime": 1570444602640,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {
+    "10a024a4-cb38-450b-a601-0106ffb758ad": {
+      "attributes": {
+        "description": null,
+        "endTime": 1570444602623,
+        "hostName": "nb-atl-2409-2.openstacklocal",
+        "name": "create table db_2.table_2 as select * from db_1.table_1:1570444589240",
+        "owner": null,
+        "qualifiedName": "db_2.table_2@cl1:1570444602000:1570444589240:1570444602623",
+        "queryGraph": null,
+        "queryId": "hive_20191007103629_e6f69952-08e4-4b0c-a3b8-faf42d819ff3",
+        "queryPlan": "Not Supported",
+        "queryText": "create table db_2.table_2 as select * from db_1.table_1",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "startTime": 1570444589240,
+        "userName": "hive"
+      },
+      "createTime": 1570444602640,
+      "createdBy": "hive",
+      "guid": "10a024a4-cb38-450b-a601-0106ffb758ad",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "meanings": [],
+        "process": {
+          "displayText": "create table db_2.table_2 as select * from db_1.table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+          "relationshipAttributes": {
+            "typeName": "hive_process_process_executions"
+          },
+          "relationshipGuid": "e40f8127-3415-4c3e-ac7e-424d3349f116",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_process_process_executions",
+          "typeName": "hive_process"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_process_execution",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    },
+    "52b4662b-999d-4f63-a977-89bc9ea8ff46": {
+      "attributes": {
+        "depenendencyType": "SIMPLE",
+        "description": null,
+        "expression": null,
+        "inputs": [
+          {
+            "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+            "typeName": "hive_column",
+            "uniqueAttributes": {
+              "qualifiedName": "db_1.table_1.id@cl1"
+            }
+          }
+        ],
+        "name": "db_2.table_2@cl1:1570444602000:id",
+        "outputs": [
+          {
+            "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+            "typeName": "hive_column",
+            "uniqueAttributes": {
+              "qualifiedName": "db_2.table_2.id@cl1"
+            }
+          }
+        ],
+        "owner": null,
+        "qualifiedName": "db_2.table_2@cl1:1570444602000:id",
+        "query": {
+          "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+          "typeName": "hive_process"
+        },
+        "replicatedFrom": null,
+        "replicatedTo": null
+      },
+      "createTime": 1570444602640,
+      "createdBy": "hive",
+      "guid": "52b4662b-999d-4f63-a977-89bc9ea8ff46",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "inputs": [
+          {
+            "displayText": "id",
+            "entityStatus": "ACTIVE",
+            "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+            "relationshipAttributes": {
+              "typeName": "dataset_process_inputs"
+            },
+            "relationshipGuid": "82b2e578-e707-4c62-9e70-e94bfbe5caf2",
+            "relationshipStatus": "ACTIVE",
+            "relationshipType": "dataset_process_inputs",
+            "typeName": "hive_column"
+          }
+        ],
+        "meanings": [],
+        "outputs": [
+          {
+            "displayText": "id",
+            "entityStatus": "ACTIVE",
+            "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+            "relationshipAttributes": {
+              "typeName": "process_dataset_outputs"
+            },
+            "relationshipGuid": "4c42c8a1-a0c5-4125-ace3-8fc59312b6dd",
+            "relationshipStatus": "ACTIVE",
+            "relationshipType": "process_dataset_outputs",
+            "typeName": "hive_column"
+          }
+        ],
+        "query": {
+          "displayText": "create table db_2.table_2 as select * from db_1.table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+          "relationshipAttributes": {
+            "typeName": "hive_process_column_lineage"
+          },
+          "relationshipGuid": "26c9dec4-f3c9-4a17-82df-7156d68568f4",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_process_column_lineage",
+          "typeName": "hive_process"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_column_lineage",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    }
+  }
+}
\ No newline at end of file
diff --git a/repository/src/test/resources/json/entities/table1.json b/repository/src/test/resources/json/entities/table1.json
new file mode 100644
index 0000000..a1411c1
--- /dev/null
+++ b/repository/src/test/resources/json/entities/table1.json
@@ -0,0 +1,276 @@
+{
+  "entity": {
+    "attributes": {
+      "aliases": null,
+      "columns": [
+        {
+          "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+          "typeName": "hive_column"
+        }
+      ],
+      "comment": null,
+      "createTime": 1570444588000,
+      "db": {
+        "guid": "1c4e939e-ff6b-4229-92a4-b60c00deb547",
+        "typeName": "hive_db"
+      },
+      "description": null,
+      "lastAccessTime": 1570444588000,
+      "name": "table_1",
+      "owner": "hive",
+      "parameters": {
+        "COLUMN_STATS_ACCURATE": "{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"id\":\"true\"}}",
+        "bucketing_version": "2",
+        "numFiles": "0",
+        "numRows": "0",
+        "rawDataSize": "0",
+        "totalSize": "0",
+        "transactional": "true",
+        "transactional_properties": "default",
+        "transient_lastDdlTime": "1570444588"
+      },
+      "partitionKeys": [],
+      "qualifiedName": "db_1.table_1@cl1",
+      "replicatedFrom": null,
+      "replicatedTo": null,
+      "retention": 0,
+      "sd": {
+        "guid": "52e8353a-36e5-475f-8626-908a07230dfd",
+        "typeName": "hive_storagedesc"
+      },
+      "tableType": "MANAGED_TABLE",
+      "temporary": false,
+      "viewExpandedText": null,
+      "viewOriginalText": null
+    },
+    "createTime": 1570444591401,
+    "createdBy": "hive",
+    "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+    "isIncomplete": false,
+    "relationshipAttributes": {
+      "columns": [
+        {
+          "displayText": "id",
+          "entityStatus": "ACTIVE",
+          "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+          "relationshipAttributes": {
+            "typeName": "hive_table_columns"
+          },
+          "relationshipGuid": "f9e10d9a-0021-485e-8f49-b015b2223faf",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_columns",
+          "typeName": "hive_column"
+        }
+      ],
+      "db": {
+        "displayText": "db_1",
+        "entityStatus": "ACTIVE",
+        "guid": "1c4e939e-ff6b-4229-92a4-b60c00deb547",
+        "relationshipAttributes": {
+          "typeName": "hive_table_db"
+        },
+        "relationshipGuid": "1108f124-2dc9-4406-b063-a9751205308d",
+        "relationshipStatus": "ACTIVE",
+        "relationshipType": "hive_table_db",
+        "typeName": "hive_db"
+      },
+      "ddlQueries": [
+        {
+          "displayText": "db_1.table_1@cl1:1570444588003",
+          "entityStatus": "ACTIVE",
+          "guid": "942802d2-0310-40f3-ab0a-8e35a6e43b53",
+          "relationshipAttributes": {
+            "typeName": "hive_table_ddl_queries"
+          },
+          "relationshipGuid": "30b3a990-c362-4044-9e78-5a7be7f35307",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_ddl_queries",
+          "typeName": "hive_table_ddl"
+        }
+      ],
+      "inputToProcesses": [
+        {
+          "displayText": "create table db_2.table_2 as select * from db_1.table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+          "relationshipAttributes": {
+            "typeName": "dataset_process_inputs"
+          },
+          "relationshipGuid": "69a92de6-2ff0-48bf-821a-5be9b3605aea",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "dataset_process_inputs",
+          "typeName": "hive_process"
+        }
+      ],
+      "meanings": [],
+      "outputFromProcesses": [],
+      "partitionKeys": [],
+      "schema": [],
+      "sd": {
+        "displayText": "db_1.table_1@cl1_storage",
+        "entityStatus": "ACTIVE",
+        "guid": "52e8353a-36e5-475f-8626-908a07230dfd",
+        "relationshipAttributes": {
+          "typeName": "hive_table_storagedesc"
+        },
+        "relationshipGuid": "5a40781f-edf1-4854-ba53-d94829039f4a",
+        "relationshipStatus": "ACTIVE",
+        "relationshipType": "hive_table_storagedesc",
+        "typeName": "hive_storagedesc"
+      }
+    },
+    "status": "ACTIVE",
+    "typeName": "hive_table",
+    "updateTime": 1570444602640,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {
+    "52e8353a-36e5-475f-8626-908a07230dfd": {
+      "attributes": {
+        "bucketCols": null,
+        "compressed": false,
+        "inputFormat": "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat",
+        "location": "hdfs://localhost:8020/warehouse/tablespace/managed/hive/db_1.db/table_1",
+        "numBuckets": -1,
+        "outputFormat": "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat",
+        "parameters": {},
+        "qualifiedName": "db_1.table_1@cl1_storage",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "serdeInfo": {
+          "attributes": {
+            "name": null,
+            "parameters": {
+              "serialization.format": "1"
+            },
+            "serializationLib": "org.apache.hadoop.hive.ql.io.orc.OrcSerde"
+          },
+          "typeName": "hive_serde"
+        },
+        "sortCols": [],
+        "storedAsSubDirectories": false,
+        "table": {
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "typeName": "hive_table"
+        }
+      },
+      "createTime": 1570444591401,
+      "createdBy": "hive",
+      "guid": "52e8353a-36e5-475f-8626-908a07230dfd",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "meanings": [],
+        "table": {
+          "displayText": "table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "relationshipAttributes": {
+            "typeName": "hive_table_storagedesc"
+          },
+          "relationshipGuid": "5a40781f-edf1-4854-ba53-d94829039f4a",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_storagedesc",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_storagedesc",
+      "updateTime": 1570444591401,
+      "updatedBy": "hive",
+      "version": 0
+    },
+    "942802d2-0310-40f3-ab0a-8e35a6e43b53": {
+      "attributes": {
+        "execTime": 1570444588003,
+        "qualifiedName": "db_1.table_1@cl1:1570444588003",
+        "queryText": "create table db_1.table_1(id int)",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "serviceType": "hive",
+        "userName": "hive"
+      },
+      "createTime": 1570444591401,
+      "createdBy": "hive",
+      "guid": "942802d2-0310-40f3-ab0a-8e35a6e43b53",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "meanings": [],
+        "table": {
+          "displayText": "table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "relationshipAttributes": {
+            "typeName": "hive_table_ddl_queries"
+          },
+          "relationshipGuid": "30b3a990-c362-4044-9e78-5a7be7f35307",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_ddl_queries",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_table_ddl",
+      "updateTime": 1570444591401,
+      "updatedBy": "hive",
+      "version": 0
+    },
+    "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb": {
+      "attributes": {
+        "comment": null,
+        "description": null,
+        "name": "id",
+        "owner": "hive",
+        "position": 0,
+        "qualifiedName": "db_1.table_1.id@cl1",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "table": {
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "typeName": "hive_table"
+        },
+        "type": "int"
+      },
+      "createTime": 1570444591401,
+      "createdBy": "hive",
+      "guid": "9f6a3c7d-2b93-485b-b7cd-47775c50d6fb",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "inputToProcesses": [
+          {
+            "displayText": "db_2.table_2@cl1:1570444602000:id",
+            "entityStatus": "ACTIVE",
+            "guid": "52b4662b-999d-4f63-a977-89bc9ea8ff46",
+            "relationshipAttributes": {
+              "typeName": "dataset_process_inputs"
+            },
+            "relationshipGuid": "82b2e578-e707-4c62-9e70-e94bfbe5caf2",
+            "relationshipStatus": "ACTIVE",
+            "relationshipType": "dataset_process_inputs",
+            "typeName": "hive_column_lineage"
+          }
+        ],
+        "meanings": [],
+        "outputFromProcesses": [],
+        "schema": [],
+        "table": {
+          "displayText": "table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "3f6c02be-61e8-4dae-a7b8-cc37f289ce6e",
+          "relationshipAttributes": {
+            "typeName": "hive_table_columns"
+          },
+          "relationshipGuid": "f9e10d9a-0021-485e-8f49-b015b2223faf",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_columns",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_column",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    }
+  }
+}
\ No newline at end of file
diff --git a/repository/src/test/resources/json/entities/table2.json b/repository/src/test/resources/json/entities/table2.json
new file mode 100644
index 0000000..5374d86
--- /dev/null
+++ b/repository/src/test/resources/json/entities/table2.json
@@ -0,0 +1,276 @@
+{
+  "entity": {
+    "attributes": {
+      "aliases": null,
+      "columns": [
+        {
+          "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+          "typeName": "hive_column"
+        }
+      ],
+      "comment": null,
+      "createTime": 1570444602000,
+      "db": {
+        "guid": "77c3bccf-ca3f-42e7-b2dd-f5a35f63eea6",
+        "typeName": "hive_db"
+      },
+      "description": null,
+      "lastAccessTime": 1570444602000,
+      "name": "table_2",
+      "owner": "hive",
+      "parameters": {
+        "COLUMN_STATS_ACCURATE": "{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"id\":\"true\"}}",
+        "bucketing_version": "2",
+        "numFiles": "0",
+        "numRows": "0",
+        "rawDataSize": "0",
+        "totalSize": "0",
+        "transactional": "true",
+        "transactional_properties": "default",
+        "transient_lastDdlTime": "1570444602"
+      },
+      "partitionKeys": [],
+      "qualifiedName": "db_2.table_2@cl1",
+      "replicatedFrom": null,
+      "replicatedTo": null,
+      "retention": 0,
+      "sd": {
+        "guid": "403607a6-2092-43a8-8816-9d128592004f",
+        "typeName": "hive_storagedesc"
+      },
+      "tableType": "MANAGED_TABLE",
+      "temporary": false,
+      "viewExpandedText": null,
+      "viewOriginalText": null
+    },
+    "createTime": 1570444602640,
+    "createdBy": "hive",
+    "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+    "isIncomplete": false,
+    "relationshipAttributes": {
+      "columns": [
+        {
+          "displayText": "id",
+          "entityStatus": "ACTIVE",
+          "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+          "relationshipAttributes": {
+            "typeName": "hive_table_columns"
+          },
+          "relationshipGuid": "a7c41412-35c9-408c-894b-aa58005b46ae",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_columns",
+          "typeName": "hive_column"
+        }
+      ],
+      "db": {
+        "displayText": "db_2",
+        "entityStatus": "ACTIVE",
+        "guid": "77c3bccf-ca3f-42e7-b2dd-f5a35f63eea6",
+        "relationshipAttributes": {
+          "typeName": "hive_table_db"
+        },
+        "relationshipGuid": "a6cf6e79-2614-4284-b3e8-48d1d261c2e9",
+        "relationshipStatus": "ACTIVE",
+        "relationshipType": "hive_table_db",
+        "typeName": "hive_db"
+      },
+      "ddlQueries": [
+        {
+          "displayText": "db_2.table_2@cl1:1570444589240",
+          "entityStatus": "ACTIVE",
+          "guid": "eb5d6056-f5a3-46c4-948f-dae2f9481076",
+          "relationshipAttributes": {
+            "typeName": "hive_table_ddl_queries"
+          },
+          "relationshipGuid": "e807ef3b-d7f0-4e1f-b358-57525790e376",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_ddl_queries",
+          "typeName": "hive_table_ddl"
+        }
+      ],
+      "inputToProcesses": [],
+      "meanings": [],
+      "outputFromProcesses": [
+        {
+          "displayText": "create table db_2.table_2 as select * from db_1.table_1",
+          "entityStatus": "ACTIVE",
+          "guid": "caf7f40a-b334-4f9e-9bf2-f24ce43db47f",
+          "relationshipAttributes": {
+            "typeName": "process_dataset_outputs"
+          },
+          "relationshipGuid": "d38c4409-65c4-4ba4-99bb-c655d8be8197",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "process_dataset_outputs",
+          "typeName": "hive_process"
+        }
+      ],
+      "partitionKeys": [],
+      "schema": [],
+      "sd": {
+        "displayText": "db_2.table_2@cl1_storage",
+        "entityStatus": "ACTIVE",
+        "guid": "403607a6-2092-43a8-8816-9d128592004f",
+        "relationshipAttributes": {
+          "typeName": "hive_table_storagedesc"
+        },
+        "relationshipGuid": "66633928-9605-428a-8b1e-270ebbaec62b",
+        "relationshipStatus": "ACTIVE",
+        "relationshipType": "hive_table_storagedesc",
+        "typeName": "hive_storagedesc"
+      }
+    },
+    "status": "ACTIVE",
+    "typeName": "hive_table",
+    "updateTime": 1570444602640,
+    "updatedBy": "hive",
+    "version": 0
+  },
+  "referredEntities": {
+    "403607a6-2092-43a8-8816-9d128592004f": {
+      "attributes": {
+        "bucketCols": null,
+        "compressed": false,
+        "inputFormat": "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat",
+        "location": "hdfs://localhost:8020/warehouse/tablespace/managed/hive/db_2.db/table_2",
+        "numBuckets": -1,
+        "outputFormat": "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat",
+        "parameters": {},
+        "qualifiedName": "db_2.table_2@cl1_storage",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "serdeInfo": {
+          "attributes": {
+            "name": null,
+            "parameters": {
+              "serialization.format": "1"
+            },
+            "serializationLib": "org.apache.hadoop.hive.ql.io.orc.OrcSerde"
+          },
+          "typeName": "hive_serde"
+        },
+        "sortCols": [],
+        "storedAsSubDirectories": false,
+        "table": {
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "typeName": "hive_table"
+        }
+      },
+      "createTime": 1570444602640,
+      "createdBy": "hive",
+      "guid": "403607a6-2092-43a8-8816-9d128592004f",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "meanings": [],
+        "table": {
+          "displayText": "table_2",
+          "entityStatus": "ACTIVE",
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "relationshipAttributes": {
+            "typeName": "hive_table_storagedesc"
+          },
+          "relationshipGuid": "66633928-9605-428a-8b1e-270ebbaec62b",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_storagedesc",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_storagedesc",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    },
+    "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0": {
+      "attributes": {
+        "comment": null,
+        "description": null,
+        "name": "id",
+        "owner": "hive",
+        "position": 0,
+        "qualifiedName": "db_2.table_2.id@cl1",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "table": {
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "typeName": "hive_table"
+        },
+        "type": "int"
+      },
+      "createTime": 1570444602640,
+      "createdBy": "hive",
+      "guid": "d3ba7485-6b77-4f32-b3c9-e3d45d0949c0",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "inputToProcesses": [],
+        "meanings": [],
+        "outputFromProcesses": [
+          {
+            "displayText": "db_2.table_2@cl1:1570444602000:id",
+            "entityStatus": "ACTIVE",
+            "guid": "52b4662b-999d-4f63-a977-89bc9ea8ff46",
+            "relationshipAttributes": {
+              "typeName": "process_dataset_outputs"
+            },
+            "relationshipGuid": "4c42c8a1-a0c5-4125-ace3-8fc59312b6dd",
+            "relationshipStatus": "ACTIVE",
+            "relationshipType": "process_dataset_outputs",
+            "typeName": "hive_column_lineage"
+          }
+        ],
+        "schema": [],
+        "table": {
+          "displayText": "table_2",
+          "entityStatus": "ACTIVE",
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "relationshipAttributes": {
+            "typeName": "hive_table_columns"
+          },
+          "relationshipGuid": "a7c41412-35c9-408c-894b-aa58005b46ae",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_columns",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_column",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    },
+    "eb5d6056-f5a3-46c4-948f-dae2f9481076": {
+      "attributes": {
+        "execTime": 1570444589240,
+        "qualifiedName": "db_2.table_2@cl1:1570444589240",
+        "queryText": "create table db_2.table_2 as select * from db_1.table_1",
+        "replicatedFrom": null,
+        "replicatedTo": null,
+        "serviceType": "hive",
+        "userName": "hive"
+      },
+      "createTime": 1570444602640,
+      "createdBy": "hive",
+      "guid": "eb5d6056-f5a3-46c4-948f-dae2f9481076",
+      "isIncomplete": false,
+      "relationshipAttributes": {
+        "meanings": [],
+        "table": {
+          "displayText": "table_2",
+          "entityStatus": "ACTIVE",
+          "guid": "b8cbc39f-4467-429b-a7fe-4ba2c28cceca",
+          "relationshipAttributes": {
+            "typeName": "hive_table_ddl_queries"
+          },
+          "relationshipGuid": "e807ef3b-d7f0-4e1f-b358-57525790e376",
+          "relationshipStatus": "ACTIVE",
+          "relationshipType": "hive_table_ddl_queries",
+          "typeName": "hive_table"
+        }
+      },
+      "status": "ACTIVE",
+      "typeName": "hive_table_ddl",
+      "updateTime": 1570444602640,
+      "updatedBy": "hive",
+      "version": 0
+    }
+  }
+}
\ No newline at end of file