/** * Get a dimension row given an id. * * @param value dimension id to look up * * @return dimension row if exists else null */ public DimensionRow findDimensionRowByKeyValue(String value) { return dimension.findDimensionRowByKeyValue(value); }
/** * Extracts dimension rows for the given dimension columns. * * @param dimensionRowsNode JsonNode which contains all the dimension rows which contains dimension names * and its unique id as its value * @param dimensionColumns DimensionColumns which needs to have dimension rows * * @return Map of all the dimensionRows associated with dimensionColumns */ private Map<DimensionColumn, DimensionRow> extractDimensionValues( JsonNode dimensionRowsNode, Set<DimensionColumn> dimensionColumns ) { return dimensionColumns.stream().collect(Collectors.toMap( Function.identity(), dimensionColumn -> dimensionColumn.getDimension().findDimensionRowByKeyValue( dimensionRowsNode.get(dimensionColumn.getDimension().getApiName()).asText() ) )); }
/** * Extract the dimension rows for a json object given the set of all available dimension columns and the json * object. * * @param dimensionColumns the set of dimension columns * @param entry the json object * * @return map of dimension columns to dimension rows */ private LinkedHashMap<DimensionColumn, DimensionRow> extractDimensionRows( Set<DimensionColumn> dimensionColumns, JsonNode entry ) { LinkedHashMap<DimensionColumn, DimensionRow> dimensionRows = new LinkedHashMap<>(); for (DimensionColumn dc : dimensionColumns) { JsonNode fieldNode = entry.get(dc.getName()); String fieldValue = ""; if (fieldNode != null) { fieldValue = fieldNode.asText(""); } DimensionRow drow = dc.getDimension().findDimensionRowByKeyValue(fieldValue); if (drow == null) { drow = dc.getDimension().createEmptyDimensionRow(fieldValue); } dimensionRows.put(dc, drow); } return dimensionRows; }
/** * Reads the results of a Druid GroupBy Query to find dimension values. * * @param dimension The dimension to load values for. * * @return the callback to load dimension values. */ private SuccessCallback buildSuccessCallback(Dimension dimension) { return rootNode -> { rootNode.forEach(row -> { JsonNode eventRow = row.get("event"); String dimensionValue = eventRow.get(dimension.getApiName()).asText(); if (dimension.findDimensionRowByKeyValue(dimensionValue) == null) { DimensionRow dimensionRow = dimension.createEmptyDimensionRow(dimensionValue); updateDimensionWithValue(dimension, dimensionRow); } }); updateDimension(dimension); }; }
/** * Build the callback to handle the successful druid query response. * * @param dimension Dimension for which we are getting values * * @return the callback */ private SuccessCallback buildDruidDimensionsSuccessCallback(Dimension dimension) { return rootNode -> { rootNode.forEach(intervalNode -> { intervalNode.get("result").forEach(dim -> { String value = dim.get("value").asText(); if (dimension.findDimensionRowByKeyValue(value) == null) { DimensionRow dimRow = dimension.createEmptyDimensionRow(value); updateDimensionWithValue(dimension, dimRow); } }); }); updateDimension(dimension); }; } }
for (Map<String, String> fieldnameValueMap: rawDimensionRows.get("dimensionRows")) { DimensionRow newRow = dimension.parseDimensionRow(fieldnameValueMap); DimensionRow oldRow = dimension.findDimensionRowByKeyValue(newRow.get(key)); if (oldRow == null) {