This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch branch-1.0
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/branch-1.0 by this push:
new 07d5cc9 ATLAS-3110: added REST API to get multiple entities given
their unique attribute values
07d5cc9 is described below
commit 07d5cc9fbdcee8d020f4a4d0dc59dc6f12ecf2ab
Author: Ayush Nigam <[email protected]>
AuthorDate: Wed Apr 10 21:50:59 2019 -0700
ATLAS-3110: added REST API to get multiple entities given their unique
attribute values
Signed-off-by: Madhan Neethiraj <[email protected]>
(cherry picked from commit 9d4380e0f32ab47ba51eba89d514be3968a3bd86)
---
.../main/java/org/apache/atlas/AtlasClientV2.java | 50 +++++++++---
.../repository/store/graph/AtlasEntityStore.java | 11 +++
.../store/graph/v2/AtlasEntityStoreV2.java | 24 ++++++
.../store/graph/v2/EntityGraphRetriever.java | 48 ++++++++++-
.../java/org/apache/atlas/web/rest/EntityREST.java | 92 +++++++++++++++++++++-
.../org/apache/atlas/examples/QuickStartV2IT.java | 28 +++++++
6 files changed, 242 insertions(+), 11 deletions(-)
diff --git a/client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java
b/client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java
index a5ef34b..c7ce5a9 100644
--- a/client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java
+++ b/client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java
@@ -27,7 +27,6 @@ import org.apache.atlas.model.instance.AtlasClassification;
import
org.apache.atlas.model.instance.AtlasClassification.AtlasClassifications;
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
import org.apache.atlas.model.instance.AtlasRelationship;
import org.apache.atlas.model.instance.AtlasEntityHeaders;
import org.apache.atlas.model.instance.EntityMutationResponse;
@@ -56,6 +55,7 @@ public class AtlasClientV2 extends AtlasBaseClient {
// Entity APIs
public static final String ENTITY_API = BASE_URI + "v2/entity/";
private static final String PREFIX_ATTR = "attr:";
+ private static final String PREFIX_ATTR_ = "attr_";
private static final String TYPEDEFS_API = TYPES_API + "typedefs/";
private static final String TYPEDEF_BY_NAME = TYPES_API +
"typedef/name/";
private static final String TYPEDEF_BY_GUID = TYPES_API +
"typedef/guid/";
@@ -271,12 +271,12 @@ public class AtlasClientV2 extends AtlasBaseClient {
return callAPI(API_V2.GET_ENTITY_BY_GUID,
AtlasEntityWithExtInfo.class, queryParams, guid);
}
- public AtlasEntityWithExtInfo getEntityByAttribute(String type,
Map<String, String> attributes) throws AtlasServiceException {
- return getEntityByAttribute(type, attributes, false, false);
+ public AtlasEntityWithExtInfo getEntityByAttribute(String type,
Map<String, String> uniqAttributes) throws AtlasServiceException {
+ return getEntityByAttribute(type, uniqAttributes, false, false);
}
- public AtlasEntityWithExtInfo getEntityByAttribute(String type,
Map<String, String> attributes, boolean minExtInfo, boolean ignoreRelationship)
throws AtlasServiceException {
- MultivaluedMap<String, String> queryParams =
attributesToQueryParams(attributes);
+ public AtlasEntityWithExtInfo getEntityByAttribute(String type,
Map<String, String> uniqAttributes, boolean minExtInfo, boolean
ignoreRelationship) throws AtlasServiceException {
+ MultivaluedMap<String, String> queryParams =
attributesToQueryParams(uniqAttributes);
queryParams.add("minExtInfo", String.valueOf(minExtInfo));
queryParams.add("ignoreRelationships",
String.valueOf(ignoreRelationship));
@@ -284,17 +284,31 @@ public class AtlasClientV2 extends AtlasBaseClient {
return callAPI(API_V2.GET_ENTITY_BY_ATTRIBUTE,
AtlasEntityWithExtInfo.class, queryParams, type);
}
- public EntityMutationResponse updateEntityByAttribute(String type,
Map<String, String> attributes, AtlasEntityWithExtInfo entityInfo)
+ public AtlasEntitiesWithExtInfo getEntitiesByAttribute(String type,
List<Map<String,String>> uniqAttributesList) throws AtlasServiceException {
+ return getEntitiesByAttribute(type, uniqAttributesList, false, false);
+ }
+
+ public AtlasEntitiesWithExtInfo getEntitiesByAttribute(String type,
List<Map<String, String>> uniqAttributesList, boolean minExtInfo, boolean
ignoreRelationship) throws AtlasServiceException {
+ MultivaluedMap<String, String> queryParams =
attributesToQueryParams(uniqAttributesList, null);
+
+ queryParams.add("minExtInfo", String.valueOf(minExtInfo));
+ queryParams.add("ignoreRelationships",
String.valueOf(ignoreRelationship));
+
+ return callAPI(API_V2.GET_ENTITIES_BY_ATTRIBUTES,
AtlasEntitiesWithExtInfo.class, queryParams, type);
+ }
+
+
+ public EntityMutationResponse updateEntityByAttribute(String type,
Map<String, String> uniqAttributes, AtlasEntityWithExtInfo entityInfo)
throws AtlasServiceException {
- MultivaluedMap<String, String> queryParams =
attributesToQueryParams(attributes);
+ MultivaluedMap<String, String> queryParams =
attributesToQueryParams(uniqAttributes);
return callAPI(API_V2.UPDATE_ENTITY_BY_ATTRIBUTE,
EntityMutationResponse.class, entityInfo, queryParams, type);
}
/* Lineage Calls */
- public EntityMutationResponse deleteEntityByAttribute(String type,
Map<String, String> attributes) throws AtlasServiceException {
- MultivaluedMap<String, String> queryParams =
attributesToQueryParams(attributes);
+ public EntityMutationResponse deleteEntityByAttribute(String type,
Map<String, String> uniqAttributes) throws AtlasServiceException {
+ MultivaluedMap<String, String> queryParams =
attributesToQueryParams(uniqAttributes);
return callAPI(API_V2.DELETE_ENTITY_BY_ATTRIBUTE,
EntityMutationResponse.class, queryParams, type);
}
@@ -462,6 +476,23 @@ public class AtlasClientV2 extends AtlasBaseClient {
return queryParams;
}
+ private MultivaluedMap<String, String>
attributesToQueryParams(List<Map<String, String>> attributesList,
+
MultivaluedMap<String, String> queryParams) {
+ if (queryParams == null) {
+ queryParams = new MultivaluedMapImpl();
+ }
+
+ for (int i = 0; i < attributesList.size(); i++) {
+ Map<String, String> attributes = attributesList.get(i);
+
+ for (Map.Entry<String, String> entry : attributes.entrySet()) {
+ queryParams.putSingle(PREFIX_ATTR_ + i + ":" + entry.getKey(),
entry.getValue());
+ }
+ }
+
+ return queryParams;
+ }
+
private <T> T getTypeDefByName(final String name, Class<T> typeDefClass)
throws AtlasServiceException {
String atlasPath = getAtlasPath(typeDefClass);
API api = new API(String.format(GET_BY_NAME_TEMPLATE,
atlasPath, name), HttpMethod.GET, Response.Status.OK);
@@ -502,6 +533,7 @@ public class AtlasClientV2 extends AtlasBaseClient {
public static final API_V2 UPDATE_ENTITY_BY_ATTRIBUTE = new
API_V2(ENTITY_API + "uniqueAttribute/type/", HttpMethod.PUT,
Response.Status.OK);
public static final API_V2 DELETE_ENTITY_BY_GUID = new
API_V2(ENTITY_API + "guid/", HttpMethod.DELETE, Response.Status.OK);
public static final API_V2 DELETE_ENTITY_BY_ATTRIBUTE = new
API_V2(ENTITY_API + "uniqueAttribute/type/", HttpMethod.DELETE,
Response.Status.OK);
+ public static final API_V2 GET_ENTITIES_BY_ATTRIBUTES = new
API_V2(ENTITY_BULK_API + "uniqueAttribute/type/", HttpMethod.GET,
Response.Status.OK);
public static final API_V2 GET_ENTITIES_BY_GUIDS = new
API_V2(ENTITY_BULK_API, HttpMethod.GET, Response.Status.OK);
public static final API_V2 CREATE_ENTITIES = new
API_V2(ENTITY_BULK_API, HttpMethod.POST, Response.Status.OK);
public static final API_V2 UPDATE_ENTITIES = new
API_V2(ENTITY_BULK_API, HttpMethod.POST, Response.Status.OK);
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/AtlasEntityStore.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/AtlasEntityStore.java
index 74c19e2..01b8d19 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/AtlasEntityStore.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/AtlasEntityStore.java
@@ -89,6 +89,17 @@ public interface AtlasEntityStore {
AtlasEntitiesWithExtInfo getByIds(List<String> guid, boolean isMinExtInfo,
boolean ignoreRelationships) throws AtlasBaseException;
/**
+ * Batch GET to retrieve entities by their uniqueIds
+ * @param entityType
+ * @param uniqueAttributes
+ * @param isMinExtInfo
+ * @param ignoreRelationships
+ * @return
+ * @throws AtlasBaseException
+ */
+ AtlasEntitiesWithExtInfo getEntitiesByUniqueAttributes(AtlasEntityType
entityType, List<Map<String, Object>> uniqueAttributes, boolean isMinExtInfo,
boolean ignoreRelationships) throws AtlasBaseException;
+
+ /**
*
* Get an eneity by its unique attribute
* @param entityType type of the entity
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
index a74eded..bf90df1 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
@@ -189,6 +189,30 @@ public class AtlasEntityStoreV2 implements
AtlasEntityStore {
@Override
@GraphTransaction
+ public AtlasEntitiesWithExtInfo
getEntitiesByUniqueAttributes(AtlasEntityType entityType, List<Map<String,
Object>> uniqueAttributes , boolean isMinExtInfo, boolean ignoreRelationships)
throws AtlasBaseException {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> getEntitiesByUniqueAttributes({}, {})",
entityType.getTypeName(), uniqueAttributes);
+ }
+
+ EntityGraphRetriever entityRetriever = new
EntityGraphRetriever(typeRegistry, ignoreRelationships);
+
+ AtlasEntitiesWithExtInfo ret =
entityRetriever.getEntitiesByUniqueAttributes(entityType.getTypeName(),
uniqueAttributes, isMinExtInfo);
+
+ if (ret != null && ret.getEntities() != null) {
+ for (AtlasEntity entity : ret.getEntities()) {
+ AtlasAuthorizationUtils.verifyAccess(new
AtlasEntityAccessRequest(typeRegistry, AtlasPrivilege.ENTITY_READ, new
AtlasEntityHeader(entity)), "read entity: typeName=", entityType.getTypeName(),
", guid=", entity.getGuid());
+ }
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== getEntitiesByUniqueAttributes({}, {}): {}",
entityType.getTypeName(), uniqueAttributes, ret);
+ }
+
+ return ret;
+ }
+
+ @Override
+ @GraphTransaction
public AtlasEntityWithExtInfo getByUniqueAttributes(AtlasEntityType
entityType, Map<String, Object> uniqAttributes)
throws AtlasBaseException {
return getByUniqueAttributes(entityType, uniqAttributes, false, false);
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
index d5739f7..efcddef 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
@@ -89,7 +89,26 @@ import static
org.apache.atlas.repository.Constants.CLASSIFICATION_ENTITY_GUID;
import static org.apache.atlas.repository.Constants.CLASSIFICATION_LABEL;
import static
org.apache.atlas.repository.Constants.CLASSIFICATION_VALIDITY_PERIODS_KEY;
import static org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL;
-import static org.apache.atlas.repository.graph.GraphHelper.*;
+import static org.apache.atlas.repository.graph.GraphHelper.EDGE_LABEL_PREFIX;
+import static
org.apache.atlas.repository.graph.GraphHelper.addToPropagatedTraitNames;
+import static
org.apache.atlas.repository.graph.GraphHelper.getAdjacentEdgesByLabel;
+import static
org.apache.atlas.repository.graph.GraphHelper.getAllClassificationEdges;
+import static org.apache.atlas.repository.graph.GraphHelper.getAllTraitNames;
+import static
org.apache.atlas.repository.graph.GraphHelper.getAssociatedEntityVertex;
+import static
org.apache.atlas.repository.graph.GraphHelper.getBlockedClassificationIds;
+import static
org.apache.atlas.repository.graph.GraphHelper.getArrayElementsProperty;
+import static
org.apache.atlas.repository.graph.GraphHelper.getClassificationEntityStatus;
+import static
org.apache.atlas.repository.graph.GraphHelper.getClassificationVertices;
+import static org.apache.atlas.repository.graph.GraphHelper.getGuid;
+import static
org.apache.atlas.repository.graph.GraphHelper.getIncomingEdgesByLabel;
+import static org.apache.atlas.repository.graph.GraphHelper.getPrimitiveMap;
+import static org.apache.atlas.repository.graph.GraphHelper.getReferenceMap;
+import static
org.apache.atlas.repository.graph.GraphHelper.getOutGoingEdgesByLabel;
+import static org.apache.atlas.repository.graph.GraphHelper.getPropagateTags;
+import static
org.apache.atlas.repository.graph.GraphHelper.getRelationshipGuid;
+import static
org.apache.atlas.repository.graph.GraphHelper.getRemovePropagations;
+import static org.apache.atlas.repository.graph.GraphHelper.getTypeName;
+import static
org.apache.atlas.repository.graph.GraphHelper.isPropagationEnabled;
import static
org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2.getIdFromVertex;
import static
org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2.isReference;
import static
org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection;
@@ -340,6 +359,33 @@ public class EntityGraphRetriever {
return ret;
}
+ public AtlasEntitiesWithExtInfo getEntitiesByUniqueAttributes(String
typeName, List<Map<String, Object>> uniqueAttributesList, boolean isMinExtInfo)
throws AtlasBaseException {
+ AtlasEntitiesWithExtInfo ret = new AtlasEntitiesWithExtInfo();
+ AtlasEntityType entityType =
typeRegistry.getEntityTypeByName(typeName);
+
+ if (entityType != null) {
+ for (Map<String, Object> uniqAttributes : uniqueAttributesList) {
+ try {
+ AtlasVertex vertex =
AtlasGraphUtilsV2.getVertexByUniqueAttributes(entityType, uniqAttributes);
+
+ if (vertex != null) {
+ AtlasEntity entity = mapVertexToAtlasEntity(vertex,
ret, isMinExtInfo);
+
+ ret.addEntity(entity);
+ }
+ } catch(AtlasBaseException e) {
+ if (e.getAtlasErrorCode() !=
AtlasErrorCode.INSTANCE_BY_UNIQUE_ATTRIBUTE_NOT_FOUND) {
+ throw e;
+ }
+ }
+ }
+ }
+
+ ret.compact();
+
+ return ret;
+ }
+
private AtlasVertex getEntityVertex(AtlasObjectId objId) throws
AtlasBaseException {
AtlasVertex ret = null;
diff --git a/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
b/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
index 2c21773..f4abd7f 100644
--- a/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
+++ b/webapp/src/main/java/org/apache/atlas/web/rest/EntityREST.java
@@ -81,7 +81,9 @@ public class EntityREST {
private static final Logger LOG =
LoggerFactory.getLogger(EntityREST.class);
private static final Logger PERF_LOG =
AtlasPerfTracer.getPerfLogger("rest.EntityREST");
- public static final String PREFIX_ATTR = "attr:";
+ public static final String PREFIX_ATTR = "attr:";
+ public static final String PREFIX_ATTR_ = "attr_";
+
private final AtlasTypeRegistry typeRegistry;
private final AtlasEntityStore entitiesStore;
@@ -159,6 +161,8 @@ public class EntityREST {
* GET /v2/entity/uniqueAttribute/type/aType?attr:aTypeAttribute=someValue
*
* @param typeName
+ * @param minExtInfo
+ * @param ignoreRelationships
* @return AtlasEntityWithExtInfo
* @throws AtlasBaseException
*/
@@ -582,6 +586,54 @@ public class EntityREST {
/******************************************************************/
/**
+ * Bulk API to retrieve list of entities identified by its unique
attributes.
+ *
+ * In addition to the typeName path parameter, attribute key-value pair(s)
can be provided in the following format
+ *
+ *
typeName=<typeName>&attr_1:<attrName>=<attrValue>&attr_2:<attrName>=<attrValue>&attr_3:<attrName>=<attrValue>
+ *
+ * NOTE: The attrName should be an unique attribute for the given
entity-type
+ *
+ * The REST request would look something like this
+ *
+ * GET
/v2/entity/bulk/uniqueAttribute/type/hive_db?attrs_0:qualifiedName=db1@cl1&attrs_2:qualifiedName=db2@cl1
+ *
+ * @param typeName
+ * @param minExtInfo
+ * @param ignoreRelationships
+ * @return AtlasEntitiesWithExtInfo
+ * @throws AtlasBaseException
+ */
+ @GET
+ @Path("/bulk/uniqueAttribute/type/{typeName}")
+ public AtlasEntitiesWithExtInfo
getEntitiesByUniqueAttributes(@PathParam("typeName") String typeName,
+
@QueryParam("minExtInfo") @DefaultValue("false") boolean minExtInfo,
+
@QueryParam("ignoreRelationships") @DefaultValue("false") boolean
ignoreRelationships,
+ @Context
HttpServletRequest servletRequest) throws AtlasBaseException {
+ Servlets.validateQueryParamLength("typeName", typeName);
+
+ AtlasPerfTracer perf = null;
+
+ try {
+ List<Map<String, Object>> uniqAttributesList =
getAttributesList(servletRequest);
+
+ if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+ perf = AtlasPerfTracer.getPerfTracer(PERF_LOG,
"EntityREST.getEntitiesByUniqueAttributes(" + typeName + "," +
uniqAttributesList + ")");
+ }
+
+ AtlasEntityType entityType = ensureEntityType(typeName);
+
+ for (Map<String, Object> uniqAttributes : uniqAttributesList) {
+ validateUniqueAttribute(entityType, uniqAttributes);
+ }
+
+ return entitiesStore.getEntitiesByUniqueAttributes(entityType,
uniqAttributesList, minExtInfo, ignoreRelationships);
+ } finally {
+ AtlasPerfTracer.log(perf);
+ }
+ }
+
+ /**
* Bulk API to retrieve list of entities identified by its GUIDs.
*/
@GET
@@ -781,6 +833,7 @@ public class EntityREST {
return ret;
}
+ // attr:qualifiedName=db1@cl1 ==> { qualifiedName:db1@cl1 }
private Map<String, Object> getAttributes(HttpServletRequest request) {
Map<String, Object> attributes = new HashMap<>();
@@ -800,6 +853,43 @@ public class EntityREST {
return attributes;
}
+ // attrs_1:qualifiedName=db1@cl1&attrs_2:qualifiedName=db2@cl1 ==> [ {
qualifiedName:db1@cl1 }, { qualifiedName:db2@cl1 } ]
+ private List<Map<String, Object>> getAttributesList(HttpServletRequest
request) {
+ Map<String, Map<String, Object>> ret = new HashMap<>();
+
+ if (MapUtils.isNotEmpty(request.getParameterMap())) {
+ for (Map.Entry<String, String[]> entry :
request.getParameterMap().entrySet()) {
+ String key = entry.getKey();
+
+ if (key == null || !key.startsWith(PREFIX_ATTR_)) {
+ continue;
+ }
+
+ int sepPos = key.indexOf(':', PREFIX_ATTR_.length());
+ String[] values = entry.getValue();
+ String value = values != null && values.length > 0 ?
values[0] : null;
+
+ if (sepPos == -1 || value == null) {
+ continue;
+ }
+
+ String attrName = key.substring(sepPos + 1);
+ String listIdx =
key.substring(PREFIX_ATTR_.length(), sepPos);
+ Map<String, Object> attributes = ret.get(listIdx);
+
+ if (attributes == null) {
+ attributes = new HashMap<>();
+
+ ret.put(listIdx, attributes);
+ }
+
+ attributes.put(attrName, value);
+ }
+ }
+
+ return new ArrayList<>(ret.values());
+ }
+
/**
* Validate that each attribute given is an unique attribute
* @param entityType the entity type
diff --git a/webapp/src/test/java/org/apache/atlas/examples/QuickStartV2IT.java
b/webapp/src/test/java/org/apache/atlas/examples/QuickStartV2IT.java
index 02041ac..b268a24 100644
--- a/webapp/src/test/java/org/apache/atlas/examples/QuickStartV2IT.java
+++ b/webapp/src/test/java/org/apache/atlas/examples/QuickStartV2IT.java
@@ -23,6 +23,7 @@ import org.apache.atlas.AtlasServiceException;
import org.apache.atlas.model.instance.AtlasClassification;
import org.apache.atlas.model.instance.AtlasEntity;
import org.apache.atlas.model.instance.AtlasEntityHeader;
+import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
import org.apache.atlas.model.lineage.AtlasLineageInfo;
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageDirection;
import org.apache.atlas.model.lineage.AtlasLineageInfo.LineageRelation;
@@ -32,10 +33,14 @@ import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
+import static org.apache.atlas.AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME;
+import static org.apache.atlas.examples.QuickStartV2.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;
@@ -75,6 +80,19 @@ public class QuickStartV2IT extends BaseResourceIT {
verifyTrait(table);
}
+ @Test
+ public void testTablesAreAdded2() throws AtlasServiceException {
+ List<String> tableNames = Arrays.asList(SALES_FACT_TABLE,
PRODUCT_DIM_TABLE, CUSTOMER_DIM_TABLE,
+ TIME_DIM_TABLE,
SALES_FACT_DAILY_MV_TABLE, SALES_FACT_MONTHLY_MV_TABLE,
+ LOG_FACT_DAILY_MV_TABLE,
LOG_FACT_MONTHLY_MV_TABLE);
+
+ AtlasEntitiesWithExtInfo entities = getTables(tableNames);
+
+ assertNotNull(entities);
+ assertNotNull(entities.getEntities());
+ assertEquals(entities.getEntities().size(), tableNames.size());
+ }
+
private AtlasEntity getTable(String tableName) throws
AtlasServiceException {
Map<String, String> attributes = new HashMap<>();
attributes.put(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, tableName);
@@ -82,6 +100,16 @@ public class QuickStartV2IT extends BaseResourceIT {
return tableEntity;
}
+ private AtlasEntitiesWithExtInfo getTables(List<String> tableNames) throws
AtlasServiceException {
+ List<Map<String, String>> attributesList = new ArrayList<>();
+
+ for (String tableName : tableNames) {
+
attributesList.add(Collections.singletonMap(REFERENCEABLE_ATTRIBUTE_NAME,
tableName));
+ }
+
+ return atlasClientV2.getEntitiesByAttribute(QuickStartV2.TABLE_TYPE,
attributesList);
+ }
+
private AtlasEntity getProcess(String processName) throws
AtlasServiceException {
Map<String, String> attributes = new HashMap<>();
attributes.put(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, processName);