From 8e679ff7206043a48970fef76c9e3103d66bd0c4 Mon Sep 17 00:00:00 2001 From: Ryan Brandt Date: Fri, 26 Aug 2016 14:02:25 -0600 Subject: [PATCH] Improve dimension filtering performance Much faster to connect the tables on a different ID Change-Id: I141710287f77918389ee6634b5a072f002219471 --- .../persistence/vertica/MetricQueries.java | 11 ++++++---- .../vertica/MetricQueriesTest.java | 20 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/java/src/main/java/monasca/api/infrastructure/persistence/vertica/MetricQueries.java b/java/src/main/java/monasca/api/infrastructure/persistence/vertica/MetricQueries.java index 3479a68fd..c3268679d 100644 --- a/java/src/main/java/monasca/api/infrastructure/persistence/vertica/MetricQueries.java +++ b/java/src/main/java/monasca/api/infrastructure/persistence/vertica/MetricQueries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014,2016 Hewlett Packard Enterprise Development Company, L.P. + * (C) Copyright 2014,2016 Hewlett Packard Enterprise Development LP * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at @@ -92,8 +92,11 @@ final class MetricQueries { StringBuilder sb = new StringBuilder(); sb.append(" and ").append(tableToJoinName).append( - ".dimension_set_id in ( " - + "SELECT dimension_set_id FROM MonMetrics.Dimensions WHERE ("); + ".id in ( " + + "SELECT defDimsSub2.id FROM MonMetrics.Dimensions AS dimSub " + + "JOIN MonMetrics.DefinitionDimensions AS defDimsSub2 " + + "ON defDimsSub2.dimension_set_id = dimSub.dimension_set_id" + + " WHERE ("); int i = 0; for (Iterator> it = dimensions.entrySet().iterator(); it.hasNext(); i++) { @@ -128,7 +131,7 @@ final class MetricQueries { } } - sb.append(") GROUP BY dimension_set_id HAVING count(*) = ").append(dimensions.size()).append(") "); + sb.append(") GROUP BY defDimsSub2.id,dimSub.dimension_set_id HAVING count(*) = ").append(dimensions.size()).append(") "); return sb.toString(); diff --git a/java/src/test/java/monasca/api/infrastructure/persistence/vertica/MetricQueriesTest.java b/java/src/test/java/monasca/api/infrastructure/persistence/vertica/MetricQueriesTest.java index 3943bfa71..633827c48 100644 --- a/java/src/test/java/monasca/api/infrastructure/persistence/vertica/MetricQueriesTest.java +++ b/java/src/test/java/monasca/api/infrastructure/persistence/vertica/MetricQueriesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014,2016 Hewlett Packard Enterprise Development Company, L.P. + * (C) Copyright 2014,2016 Hewlett Packard Enterprise Development LP * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at @@ -28,9 +28,11 @@ public class MetricQueriesTest { public void metricQueriesBuildDimensionAndClauseTest1() { String expectedResult = - " and defdims.dimension_set_id in ( SELECT dimension_set_id FROM MonMetrics.Dimensions WHERE" + " and defdims.id in ( SELECT defDimsSub2.id FROM MonMetrics.Dimensions AS dimSub " + + "JOIN MonMetrics.DefinitionDimensions AS defDimsSub2 " + + "ON defDimsSub2.dimension_set_id = dimSub.dimension_set_id WHERE" + " ((name = :dname0 and value = :dvalue0) or (name = :dname1 and value = :dvalue1))" - + " GROUP BY dimension_set_id HAVING count(*) = 2) "; + + " GROUP BY defDimsSub2.id,dimSub.dimension_set_id HAVING count(*) = 2) "; Map dimsMap = new HashMap<>(); dimsMap.put("foo", "bar"); @@ -54,9 +56,11 @@ public class MetricQueriesTest { public void metricQueriesBuildDimensionAndClauseTest4() { String expectedResult = - " and defdims.dimension_set_id in ( SELECT dimension_set_id FROM MonMetrics.Dimensions WHERE" + " and defdims.id in ( SELECT defDimsSub2.id FROM MonMetrics.Dimensions AS dimSub " + + "JOIN MonMetrics.DefinitionDimensions AS defDimsSub2 " + + "ON defDimsSub2.dimension_set_id = dimSub.dimension_set_id WHERE" + " ((name = :dname0 and ( value = :dvalue0_0 or value = :dvalue0_1)))" - + " GROUP BY dimension_set_id HAVING count(*) = 1) "; + + " GROUP BY defDimsSub2.id,dimSub.dimension_set_id HAVING count(*) = 1) "; Map dimsMap = new HashMap<>(); dimsMap.put("foo", "bar|baz"); @@ -67,10 +71,12 @@ public class MetricQueriesTest { public void metricQueriesBuildDimensionAndClauseTest5() { String expectedResult = - " and defdims.dimension_set_id in ( SELECT dimension_set_id FROM MonMetrics.Dimensions WHERE" + " and defdims.id in ( SELECT defDimsSub2.id FROM MonMetrics.Dimensions AS dimSub " + + "JOIN MonMetrics.DefinitionDimensions AS defDimsSub2 " + + "ON defDimsSub2.dimension_set_id = dimSub.dimension_set_id WHERE" + " ((name = :dname0 and ( value = :dvalue0_0 or value = :dvalue0_1))" + " or (name = :dname1 and ( value = :dvalue1_0 or value = :dvalue1_1)))" - + " GROUP BY dimension_set_id HAVING count(*) = 2) "; + + " GROUP BY defDimsSub2.id,dimSub.dimension_set_id HAVING count(*) = 2) "; Map dimsMap = new HashMap<>(); dimsMap.put("foo", "bar|baz");