Improve metrics query with measurements join instead of subselect
Change-Id: I2d1a08fb4304b74e7421f2b64bc616ba0de8f4e9
This commit is contained in:
parent
caa50c61fa
commit
f31b708f38
|
@ -46,11 +46,12 @@ public class MetricDefinitionVerticaRepoImpl implements MetricDefinitionRepo {
|
|||
"SELECT TO_HEX(defDimsSub.id) "
|
||||
+ "FROM MonMetrics.Definitions defSub "
|
||||
+ "JOIN MonMetrics.DefinitionDimensions defDimsSub ON defSub.id = defDimsSub.definition_id "
|
||||
+ "%s " // possible measurements time join here
|
||||
+ "WHERE defSub.tenant_id = :tenantId "
|
||||
+ "%s " // Name goes here
|
||||
+ "%s " // Offset goes here
|
||||
+ "%s " // Dimensions and clause goes here
|
||||
+ "%s " // Time qualifier goes here
|
||||
+ "%s " // possible time and clause here
|
||||
+ "GROUP BY defDimsSub.id "
|
||||
+ "ORDER BY defDimsSub.id ASC "
|
||||
+ "%s "; // limit goes here
|
||||
|
@ -227,12 +228,12 @@ public class MetricDefinitionVerticaRepoImpl implements MetricDefinitionRepo {
|
|||
String.format(MetricQueries.FIND_METRIC_DEFS_SQL,
|
||||
this.dbHint,
|
||||
String.format(METRIC_DEF_SUB_QUERY,
|
||||
MetricQueries.buildTimeJoin(startTime),
|
||||
namePart,
|
||||
offsetPart,
|
||||
MetricQueries.buildDimensionAndClause(dimensions,
|
||||
TABLE_TO_JOIN_ON),
|
||||
MetricQueries.buildTimeAndClause(startTime, endTime,
|
||||
TABLE_TO_JOIN_ON),
|
||||
MetricQueries.buildTimeAndClause(startTime, endTime),
|
||||
limitPart)
|
||||
);
|
||||
|
||||
|
|
|
@ -52,15 +52,18 @@ final class MetricQueries {
|
|||
"SELECT TO_HEX(defDimsSub.id) as id "
|
||||
+ "FROM MonMetrics.Definitions as defSub "
|
||||
+ "JOIN MonMetrics.DefinitionDimensions as defDimsSub ON defDimsSub.definition_id = defSub.id "
|
||||
+ "%s " // possible measurements time join here
|
||||
+ "WHERE defSub.tenant_id = :tenantId "
|
||||
+ "%s " // metric name here
|
||||
+ "%s " // dimension and clause here
|
||||
+ "%s " // time and clause here
|
||||
+ "%s " // possible time and clause here
|
||||
+ "GROUP BY defDimsSub.id";
|
||||
|
||||
private static final String MEASUREMENT_AND_CLAUSE =
|
||||
"SELECT definition_dimensions_id FROM MonMetrics.Measurements "
|
||||
+ "WHERE time_stamp >= :startTime "; // start or start and end time here
|
||||
"AND time_stamp >= :startTime "; // start or start and end time here
|
||||
|
||||
private static final String MEASUREMENT_JOIN =
|
||||
"JOIN MonMetrics.Measurements AS meas ON defDimsSub.id = meas.definition_dimensions_id";
|
||||
|
||||
private static final String TABLE_TO_JOIN_ON = "defDimsSub";
|
||||
|
||||
|
@ -76,11 +79,10 @@ final class MetricQueries {
|
|||
}
|
||||
|
||||
return String.format(METRIC_DEF_SUB_SQL,
|
||||
buildTimeJoin(startTime),
|
||||
namePart,
|
||||
buildDimensionAndClause(dimensions,
|
||||
TABLE_TO_JOIN_ON),
|
||||
buildTimeAndClause(startTime, endTime,
|
||||
TABLE_TO_JOIN_ON));
|
||||
buildDimensionAndClause(dimensions, TABLE_TO_JOIN_ON),
|
||||
buildTimeAndClause(startTime, endTime));
|
||||
}
|
||||
|
||||
static String buildDimensionAndClause(Map<String, String> dimensions,
|
||||
|
@ -139,8 +141,7 @@ final class MetricQueries {
|
|||
|
||||
static String buildTimeAndClause(
|
||||
DateTime startTime,
|
||||
DateTime endTime,
|
||||
String tableToJoin)
|
||||
DateTime endTime)
|
||||
{
|
||||
if (startTime == null) {
|
||||
return "";
|
||||
|
@ -148,19 +149,24 @@ final class MetricQueries {
|
|||
|
||||
StringBuilder timeAndClause = new StringBuilder();
|
||||
|
||||
timeAndClause.append("AND ").append(tableToJoin).append(".id IN (");
|
||||
|
||||
timeAndClause.append(MEASUREMENT_AND_CLAUSE);
|
||||
|
||||
if (endTime != null) {
|
||||
timeAndClause.append("AND time_stamp <= :endTime ");
|
||||
}
|
||||
|
||||
timeAndClause.append(")");
|
||||
|
||||
return timeAndClause.toString();
|
||||
}
|
||||
|
||||
static String buildTimeJoin(DateTime startTime)
|
||||
{
|
||||
if (startTime == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return MEASUREMENT_JOIN;
|
||||
}
|
||||
|
||||
static void bindDimensionsToQuery(Query<?> query, Map<String, String> dimensions) {
|
||||
if (dimensions != null) {
|
||||
int i = 0;
|
||||
|
@ -203,6 +209,7 @@ final class MetricQueries {
|
|||
}
|
||||
|
||||
String sql = String.format(METRIC_DEF_SUB_SQL,
|
||||
"",
|
||||
namePart,
|
||||
buildDimensionAndClause(dimensions,
|
||||
TABLE_TO_JOIN_ON),
|
||||
|
|
Loading…
Reference in New Issue