This is an automated email from the ASF dual-hosted git repository. nju_yaho pushed a commit to tag ebay-3.1.0-release-20200701 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit d435a6490d70df84ea1952393549b1f2bd94db8b Author: Zhong, Yanghong <nju_y...@apache.org> AuthorDate: Mon Jun 15 12:20:07 2020 +0800 KYLIN-4564 Refine query metrics update for hybrid realization --- .../kylin/rest/metrics/QueryMetricsFacade.java | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java index f51bf08..ab06093 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java +++ b/server-base/src/main/java/org/apache/kylin/rest/metrics/QueryMetricsFacade.java @@ -19,6 +19,7 @@ package org.apache.kylin.rest.metrics; import java.nio.charset.Charset; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -30,6 +31,7 @@ import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.QueryContext; import org.apache.kylin.common.QueryContextFacade; +import org.apache.kylin.metadata.model.IStorageAware; import org.apache.kylin.metrics.MetricsManager; import org.apache.kylin.metrics.lib.impl.RecordEvent; import org.apache.kylin.metrics.lib.impl.TimedRecordEvent; @@ -121,6 +123,7 @@ public class QueryMetricsFacade { sqlResponse.getThrowable()); long totalStorageReturnCount = 0L; + Map<String, Long> totalStorageReturnCountMap = new HashMap<>(); if (contextEntry.getQueryType().equalsIgnoreCase(OLAPQuery.EnumeratorTypeEnum.OLAP.name())) { for (Map<String, QueryContext.CubeSegmentStatistics> cubeEntry : contextEntry.getCubeSegmentStatisticsMap() .values()) { @@ -140,6 +143,12 @@ public class QueryMetricsFacade { segmentEntry.isIfSuccess(), 1.0 / cubeEntry.size()); totalStorageReturnCount += segmentEntry.getStorageReturnedRows(); + Long storageReturnCount = totalStorageReturnCountMap.get(segmentEntry.getCubeName()); + if (storageReturnCount == null) { + storageReturnCount = 0L; + } + storageReturnCount += segmentEntry.getStorageReturnedRows(); + totalStorageReturnCountMap.put(segmentEntry.getCubeName(), storageReturnCount); //For update cube segment level related query metrics MetricsManager.getInstance().update(cubeSegmentMetricsEvent); } @@ -152,8 +161,26 @@ public class QueryMetricsFacade { setQueryStats(queryMetricsEvent, // sqlResponse.getDuration(), sqlResponse.getResults() == null ? 0 : sqlResponse.getResults().size(), totalStorageReturnCount); - //For update query level metrics + // For update query level metrics MetricsManager.getInstance().update(queryMetricsEvent); + + // If hit a hybrid, update query level metrics for each inner cubes + if (contextEntry.getRealizationType() == IStorageAware.ID_HYBRID) { + for (Map.Entry<String, Long> entry : totalStorageReturnCountMap.entrySet()) { + RecordEvent queryMetricsEventInner = new TimedRecordEvent( + KylinConfig.getInstanceFromEnv().getKylinMetricsSubjectQuery()); + setQueryWrapper(queryMetricsEventInner, // + user, sqlRequest.getSql(), + sqlResponse.isStorageCacheUsed() ? "CACHE" : contextEntry.getQueryType(), + norm(sqlRequest.getProject()), entry.getKey(), IStorageAware.ID_SHARDED_HBASE, + sqlResponse.getThrowable()); + // Use the total result size for each cube currently + setQueryStats(queryMetricsEventInner, // + sqlResponse.getDuration(), + sqlResponse.getResults() == null ? 0 : sqlResponse.getResults().size(), entry.getValue()); + MetricsManager.getInstance().update(queryMetricsEventInner); + } + } } }