AuthorizationUtils.getHivePrivilegeObjectType(privObject.getType()); if(privObject.isDummy()) { if (privObject.getTyp() == Type.TABLE && (privObject.getT() == null || privObject.getT().isTemporary())) { List<String> columns = null; String className = null; switch(privObject.getType()){ case DATABASE: dbname = privObject.getDatabase().getName(); break; case TABLE: dbname = privObject.getTable().getDbName(); objName = privObject.getTable().getTableName(); columns = tableName2Cols == null ? null : tableName2Cols.get(Table.getCompleteName(dbname, objName)); case DFS_DIR: case LOCAL_DIR: objName = privObject.getD().toString(); break; case FUNCTION: if(privObject.getDatabase() != null) { dbname = privObject.getDatabase().getName(); objName = privObject.getFunctionName(); className = privObject.getClassName(); break;
private static boolean needsLock(Entity entity) { switch (entity.getType()) { case TABLE: return isLockableTable(entity.getTable()); case PARTITION: return isLockableTable(entity.getPartition().getTable()); default: return true; } }
/** * Check that {@code readEntity} is also being written. */ private boolean isWritten(Entity readEntity) { for (Entity writeEntity : outputs) { //make sure to compare them as Entity, i.e. that it's the same table or partition, etc if (writeEntity.toString().equalsIgnoreCase(readEntity.toString())) { return true; } } return false; }
protected String getQualifiedName(Entity entity) throws Exception { switch (entity.getType()) { case DATABASE: return getQualifiedName(entity.getDatabase()); case TABLE: case PARTITION: return getQualifiedName(entity.getTable()); case DFS_DIR: return getQualifiedName(entity.getLocation()); } return null; }
AuthorizationUtils.getHivePrivilegeObjectType(privObject.getType()); if(privObject.isDummy()) { List<String> partKeys = null; List<String> columns = null; switch(privObject.getType()){ case DATABASE: dbname = privObject.getDatabase().getName(); break; case TABLE: dbname = privObject.getTable().getDbName(); objName = privObject.getTable().getTableName(); columns = tableName2Cols == null ? null : tableName2Cols.get(Table.getCompleteName(dbname, objName)); case DFS_DIR: case LOCAL_DIR: objName = privObject.getD().toString(); break; case FUNCTION: if(privObject.getDatabase() != null) { dbname = privObject.getDatabase().getName(); objName = privObject.getFunctionName(); break; case DUMMYPARTITION:
private List<DBModelAuthorizable> getAuthzHierarchyFromEntity(Entity entity) { List<DBModelAuthorizable> objectHierarchy = new ArrayList<DBModelAuthorizable>(); switch (entity.getType()) { case TABLE: objectHierarchy.add(new Database(entity.getTable().getDbName())); objectHierarchy.add(new Table(entity.getTable().getTableName())); break; case PARTITION: case DUMMYPARTITION: objectHierarchy.add(new Database(entity.getPartition().getTable().getDbName())); objectHierarchy.add(new Table(entity.getPartition().getTable().getTableName())); break; case DFS_DIR: case LOCAL_DIR: try { objectHierarchy.add(parseURI(entity.toString(), entity.getType().equals(Entity.Type.LOCAL_DIR))); } catch (Exception e) { throw new AuthorizationException("Failed to get File URI", e); default: throw new UnsupportedOperationException("Unsupported entity type " + entity.getType().name());
public List<AtlasObjectId> getEntities() throws Exception { List<AtlasObjectId> ret = new ArrayList<>(); for (Entity entity : getHiveContext().getOutputs()) { if (entity.getType() == Entity.Type.DATABASE) { String dbQName = getQualifiedName(entity.getDatabase()); AtlasObjectId dbId = new AtlasObjectId(HIVE_TYPE_DB, ATTRIBUTE_QUALIFIED_NAME, dbQName); context.removeFromKnownDatabase(dbQName); ret.add(dbId); } else if (entity.getType() == Entity.Type.TABLE) { String tblQName = getQualifiedName(entity.getTable()); AtlasObjectId dbId = new AtlasObjectId(HIVE_TYPE_TABLE, ATTRIBUTE_QUALIFIED_NAME, tblQName); context.removeFromKnownTable(tblQName); ret.add(dbId); } } return ret; } }
private boolean hasPartitionEntity(Collection<? extends Entity> entities) { if (entities != null) { for (Entity entity : entities) { if (entity.getType() == Entity.Type.PARTITION) { return true; } } } return false; }
private static void addInputs(HiveMetaStoreBridge hiveBridge, HiveOperation op, SortedSet<ReadEntity> sortedInputs, StringBuilder buffer, final Map<ReadEntity, Referenceable> refs, final boolean ignoreHDFSPathsInQFName) throws HiveException { if (refs != null) { if (sortedInputs != null) { Set<String> dataSetsProcessed = new LinkedHashSet<>(); for (Entity input : sortedInputs) { if (!dataSetsProcessed.contains(input.getName().toLowerCase())) { //HiveOperation.QUERY type encompasses INSERT, INSERT_OVERWRITE, UPDATE, DELETE, PATH_WRITE operations if (ignoreHDFSPathsInQFName && (Type.DFS_DIR.equals(input.getType()) || Type.LOCAL_DIR.equals(input.getType()))) { LOG.debug("Skipping dfs dir input addition to process qualified name {} ", input.getName()); } else if (refs.containsKey(input)) { if ( input.getType() == Type.PARTITION || input.getType() == Type.TABLE) { final Date createTime = HiveMetaStoreBridge.getTableCreatedTime(hiveBridge.hiveClient.getTable(input.getTable().getDbName(), input.getTable().getTableName())); addDataset(buffer, refs.get(input), createTime.getTime()); } else { addDataset(buffer, refs.get(input)); } } dataSetsProcessed.add(input.getName().toLowerCase()); } } } } }
private <T extends Entity> void processHiveEntity(HiveMetaStoreBridge dgiBridge, HiveEventContext event, T entity, Set<String> dataSetsProcessed, SortedMap<T, Referenceable> dataSets, Set<Referenceable> entities) throws AtlasHookException { try { if (entity.getType() == Type.TABLE || entity.getType() == Type.PARTITION) { final String tblQFName = HiveMetaStoreBridge.getTableQualifiedName(dgiBridge.getClusterName(), entity.getTable()); if (!dataSetsProcessed.contains(tblQFName)) { LinkedHashMap<Type, Referenceable> result = createOrUpdateEntities(dgiBridge, event, entity, false); dataSets.put(entity, result.get(Type.TABLE)); dataSetsProcessed.add(tblQFName); entities.addAll(result.values()); } } else if (entity.getType() == Type.DFS_DIR) { URI location = entity.getLocation(); if (location != null) { final String pathUri = lower(new Path(location).toString()); LOG.debug("Registering DFS Path {} ", pathUri); if (!dataSetsProcessed.contains(pathUri)) { Referenceable hdfsPath = dgiBridge.fillHDFSDataSet(pathUri); dataSets.put(entity, hdfsPath); dataSetsProcessed.add(pathUri); entities.add(hdfsPath); } } } } catch(Exception e) { throw new AtlasHookException("HiveHook.processHiveEntity() failed.", e); } }
if (entity.getType() == Entity.Type.PARTITION || entity.getType() == Entity.Type.DUMMYPARTITION) { tableForPartition.add( entity.getPartition().getTable());
public Entity(Path d, boolean islocal, boolean complete) { this.d = d; p = null; t = null; if (islocal) { typ = Type.LOCAL_DIR; } else { typ = Type.DFS_DIR; } name = computeName(); this.complete = complete; }
public AtlasEntitiesWithExtInfo getEntities() throws Exception { AtlasEntitiesWithExtInfo ret = new AtlasEntitiesWithExtInfo(); for (Entity entity : getHiveContext().getOutputs()) { if (entity.getType() == Entity.Type.DATABASE) { Database db = entity.getDatabase(); if (db != null) { db = getHive().getDatabase(db.getName()); } if (db != null) { AtlasEntity dbEntity = toDbEntity(db); ret.addEntity(dbEntity); } else { LOG.error("CreateDatabase.getEntities(): failed to retrieve db"); } } } addProcessedEntities(ret); return ret; } }
/** * Does this Entity belong to target table (partition). */ private boolean isTargetTable(Entity entity, Table targetTable) { //todo: https://issues.apache.org/jira/browse/HIVE-15048 /** * is this the right way to compare? Should it just compare paths? * equals() impl looks heavy weight */ return targetTable.equals(entity.getTable()); }
@Override public int compare(Entity entity1, Entity entity2) { String name1 = entity1.getName(); String name2 = entity2.getName(); if (name1 == null || name2 == null) { name1 = entity1.getD().toString(); name2 = entity2.getD().toString(); } return name1.toLowerCase().compareTo(name2.toLowerCase()); } }
private boolean isDummyEntity(Entity entity) { return entity.isDummy(); }
switch (entity.getType()) { case DATABASE: return entity.getDatabase().getName(); case TABLE: return String.format("%s.%s", entity.getTable().getDbName(), entity.getTable().getTableName()); case PARTITION: case DUMMYPARTITION: return String.format("%s.%s/%s", entity.getPartition().getTPartition().getDbName(), entity.getPartition().getTPartition().getTableName(), entity.getPartition().getName()); case LOCAL_DIR: case DFS_DIR: try { return entity.getLocation().toString(); } catch (Exception e) { throw new EntityException(e); + entity.getType() + " entity: " + entity);
private List<String> getTablesFromEntitySet(Set<? extends Entity> entities) { List<String> tableNames = new ArrayList<>(); for (Entity entity : entities) { if (entity.getType() == Entity.Type.TABLE) { tableNames.add(entity.getTable().getDbName() + "." + entity.getTable().getTableName()); } } return tableNames; }
AuthorizationUtils.getHivePrivilegeObjectType(privObject.getType()); if(privObject.isDummy()) { List<String> partKeys = null; List<String> columns = null; switch(privObject.getType()){ case DATABASE: dbname = privObject.getDatabase().getName(); break; case TABLE: dbname = privObject.getTable().getDbName(); objName = privObject.getTable().getTableName(); columns = tableName2Cols == null ? null : tableName2Cols.get(Table.getCompleteName(dbname, objName)); case DFS_DIR: case LOCAL_DIR: objName = privObject.getD().toString(); break; case FUNCTION: if(privObject.getDatabase() != null) { dbname = privObject.getDatabase().getName(); objName = privObject.getFunctionName(); break; case DUMMYPARTITION: