protected String generateComputeQuery(Reference grouping, Reference segment, String collection) { StringBuilder selectBuilder = new StringBuilder(); if (grouping != null) { selectBuilder.append(getColumnValue(timestampMapping, grouping, true) + " as " + checkTableColumn(getColumnReference(grouping) + "_group")); if (segment != null) { selectBuilder.append(", "); } } if (segment != null) { selectBuilder.append((!segment.equals(DEFAULT_SEGMENT) ? getColumnValue(timestampMapping, segment, true) : "'" + checkLiteral(collection) + "'") + " as " + checkTableColumn(getColumnReference(segment) + "_segment")); } return selectBuilder.toString(); }
grouping != null ? (getColumnValue(timestampMapping, grouping, true) + " as " + checkTableColumn(getColumnReference(grouping) + "_group") + " ,") : "", segment != null ? (getColumnValue(timestampMapping, segment, true) + " as " + checkTableColumn(getColumnReference(segment) + "_segment") + " ,") : "", format(getFinalForAggregationFunction(measure), measure.column + "_" + measure.aggregation.name().toLowerCase()), preComputedTable.get().getValue(), where, groupBy); } else { String selectPart = (grouping == null ? "" : checkTableColumn(getColumnReference(grouping) + "_group")) + (grouping == null ? "" : ", ") + checkTableColumn(getColumnReference(segment) + "_segment"); " FROM (%s) as data GROUP BY 1, 2, 3) as data GROUP BY 1, 2 ORDER BY 3 DESC", OTHERS_TAG, checkTableColumn(getColumnReference(grouping) + "_group"), format(segmentRanked ? (" CASE WHEN segment_rank > 20 THEN '" + OTHERS_TAG + "' ELSE cast(%s as varchar) END,\n") : "cast(%s as varchar),", checkTableColumn(getColumnReference(segment) + "_segment")), format(convertSqlFunction(intermediateAggregation.get(), measure.aggregation), "value"), segmentRanked ? format("row_number() OVER (PARTITION BY %s ORDER BY value DESC) AS segment_rank,\n", checkCollection(format(getColumnReference(grouping), "value") + "_group")) : "", format(convertSqlFunction(intermediateAggregation.get(), measure.aggregation), "value"), computeQuery); " SELECT *, row_number() OVER (ORDER BY %s DESC) AS group_rank\n" + " FROM (%s) as data GROUP BY 1, 2 %s) as data GROUP BY 1 %s ORDER BY %d DESC", bothActive ? checkTableColumn(getColumnReference(grouping.type == COLUMN ? segment : grouping) + (grouping.type == COLUMN ? "_segment" : "_group")) + ", " : "", OTHERS_TAG, windowColumn, grouping == null ? "" : format(grouping.type == COLUMN ? "cast(" + checkTableColumn("%s_group") + " as varchar)" : checkTableColumn("%s_group"), getColumnReference(grouping)), segment == null ? "" : ((grouping == null ? "" : ",") + format(segment.type == COLUMN ? "cast(" + checkTableColumn("%s_segment") + " as varchar)" : checkTableColumn("%s_segment"), getColumnReference(segment))),
protected String generateComputeQuery(Reference grouping, Reference segment, String collection) { StringBuilder selectBuilder = new StringBuilder(); if (grouping != null) { selectBuilder.append(getColumnValue(grouping, true) + " as " + checkTableColumn(getColumnReference(grouping) + "_group", '`')); if (segment != null) { selectBuilder.append(", "); } } if (segment != null) { selectBuilder.append((!segment.equals(DEFAULT_SEGMENT) ? getColumnValue(segment, true) : "'" + stripName(collection, "collection") + "'") + " as " + checkTableColumn(getColumnReference(segment) + "_segment", '`')); } return selectBuilder.toString(); }
new AbstractMap.SimpleEntry<>("group", grouping)).stream() .filter(e -> e != null) .map(e -> getColumnReference(e.getValue()) + "_" + e.getKey()) .collect(Collectors.joining(", ")); String groupBy = groups.isEmpty() ? "" : ("GROUP BY " + groups + " WITH TOTALS"); String selectPart = (grouping == null ? "" : checkTableColumn(getColumnReference(grouping) + "_group", '`')) + (grouping == null ? "" : ", ") + checkTableColumn(getColumnReference(segment) + "_segment", '`'); "%s\n" + ") ORDER BY %s DESC LIMIT 500", grouping == null ? "" : format(grouping.type == COLUMN ? checkTableColumn("%s_group", '`') : checkTableColumn("%s_group", '`'), getColumnReference(grouping)), segment == null ? "" : ((grouping == null ? "" : ",") + format(segment.type == COLUMN ? checkTableColumn("%s_segment", '`') : checkTableColumn("%s_segment", '`'), getColumnReference(segment))), grouping != null || segment != null ? "," : "", computeQuery, segment != null && grouping != null ? 3 : 2);