diff options
| author | wangwei <[email protected]> | 2024-11-19 16:38:36 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2024-11-19 16:38:36 +0800 |
| commit | f2e7b5aa5c5f62646f2fec751827eb3016b1fc06 (patch) | |
| tree | a987bd6043f0aeb2cd30f941047784c8adf306c0 /src | |
| parent | 66896b67f4f0ff97e1f64c688436a28e7e70da33 (diff) | |
[Fix][TIME_FLOOR_WITH_FILL] 规范补全函数填充值(TSG-23775)
Diffstat (limited to 'src')
6 files changed, 85 insertions, 94 deletions
diff --git a/src/main/java/com/mesalab/common/utils/ConvertUtil.java b/src/main/java/com/mesalab/common/utils/ConvertUtil.java index 61e7059a..db2f1a2f 100644 --- a/src/main/java/com/mesalab/common/utils/ConvertUtil.java +++ b/src/main/java/com/mesalab/common/utils/ConvertUtil.java @@ -1,12 +1,16 @@ package com.mesalab.common.utils; +import cn.hutool.core.date.DateTime; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.*; +import com.mesalab.common.entity.DataTypeMapping; import com.mesalab.common.support.IConvertor; import com.geedgenetworks.utils.DateUtils; import com.geedgenetworks.utils.StringUtil; +import lombok.Getter; import org.nutz.lang.Lang; + import java.util.*; /** @@ -16,10 +20,12 @@ import java.util.*; * @date 2018/5/9 */ public class ConvertUtil { - public static final String GROUP_SEPARATOR = "__GALAXY__"; - enum Fill { + public static final String GROUP_SEPARATOR = "__GALAXY__"; + + @Getter + enum Fill { - NONE(""), NULL("NULL"), ZERO("0"), PREVIOUS("previous"), NEXT("next"); + NULL("NULL"), ZERO("zero"), PREVIOUS("previous"), NEXT("next"); private final String value; @@ -27,10 +33,6 @@ public class ConvertUtil { this.value = value; } - public String getValue() { - return value; - } - } @@ -135,16 +137,16 @@ public class ConvertUtil { /** * 将时序特征的数据,转换成层级结构; * 例如:Map<groupKey, timeseries Map> - * Map<timeGran,Metrics Map> - * Map<metric,value> + * Map<timeGran,Metrics Map> + * Map<metric,value> * * @param sources * @param groupLabels * @param timeGranLabel * @return */ - public static Map<String, Map<String, Map<String, Object>>> convertResultListToTimeSeries(Collection<Object> sources, - List<String> groupLabels, String timeGranLabel) { + public static Map<String, Map<String, Map<String, Object>>> convertResultListToTimeSeries(Collection<Object> sources, + List<String> groupLabels, String timeGranLabel) { Map<String, Map<String, Map<String, Object>>> resultMap = Maps.newLinkedHashMap(); for (Object source : sources) { @@ -155,7 +157,7 @@ public class ConvertUtil { if (StringUtil.isEmpty(groupLabels)) { groupValues.add("default"); } else { - for(String groupLabel : groupLabels) { + for (String groupLabel : groupLabels) { groupValues.add(String.valueOf(sourceMap.get(groupLabel))); sourceMap.remove(groupLabel); } @@ -169,7 +171,7 @@ public class ConvertUtil { if (StringUtil.isEmpty(groupMap)) { groupMap = Maps.newTreeMap(); groupMap.put(timeGran, sourceMap); - resultMap.put(groupKey,groupMap); + resultMap.put(groupKey, groupMap); } else { @@ -184,19 +186,18 @@ public class ConvertUtil { } - public static List<Map<String, Object>> convertTimeSeriesToList(Map<String, Map<String, Map<String, Object>>> target, List<String> groupLabels, String timeGranLabel) { List<Map<String, Object>> results = Lists.newArrayList(); List<String> groupValues; - for(String groupKey : target.keySet()) { + for (String groupKey : target.keySet()) { - Map<String, Map<String, Object>> timeSeriesValueMap = target.get(groupKey); - for (Map.Entry<String, Map<String,Object>> entry: timeSeriesValueMap.entrySet()) { + Map<String, Map<String, Object>> timeSeriesValueMap = target.get(groupKey); + for (Map.Entry<String, Map<String, Object>> entry : timeSeriesValueMap.entrySet()) { Map<String, Object> resultMap = Maps.newLinkedHashMap(); resultMap.put(timeGranLabel, entry.getKey()); if (StringUtil.isNotEmpty(groupLabels)) { - groupValues= Splitter.on(GROUP_SEPARATOR).splitToList(groupKey); + groupValues = Splitter.on(GROUP_SEPARATOR).splitToList(groupKey); for (int i = 0; i < groupLabels.size(); i++) { resultMap.put(groupLabels.get(i), StringUtil.isBlank(groupKey) ? StringUtil.EMPTY : groupValues.get(i)); } @@ -215,35 +216,32 @@ public class ConvertUtil { } - - - /** * 时序数据补全操作 - * @param sources TreeMap<timeGran, metricMap> + * + * @param sources TreeMap<timeGran, metricMap> * @param dateList * @param fill * @return */ - public static Map<String, Map<String, Object>> completeTimeseries(TreeMap<String, Map<String, Object>> sources, - List<Date> dateList, String fill) { + public static Map<String, Map<String, Object>> completeTimeseries(TreeMap<String, Map<String, Object>> sources, List<Date> dateList, List<Map<String, String>> metaList, String fill) { Map<String, Object> defaultElement = Maps.newHashMap(sources.firstEntry().getValue()); - - if (fill.equalsIgnoreCase(Fill.ZERO.name())){ - for(String key: defaultElement.keySet()){ - defaultElement.put(key, Integer.valueOf(Fill.ZERO.getValue())); + if (fill.equalsIgnoreCase(Fill.ZERO.getValue())) { + Map<String, String> nameTypeMap = new HashMap<>(); + for (Map<String, String> stringStringMap : metaList) { + nameTypeMap.put(stringStringMap.get("name"), stringStringMap.get("type")); } - - } else if (fill.equalsIgnoreCase(Fill.NULL.name())){ - for(String key: defaultElement.keySet()) { - defaultElement.put(key, Fill.NULL.value); - } - } else if (fill.equalsIgnoreCase(Fill.NONE.name())) { - for(String key: defaultElement.keySet()) { - defaultElement.put(key, Fill.NONE.value); + for (String key : defaultElement.keySet()) { + String type = nameTypeMap.get(key); + if (type != null) { + Object zeroValue = getZeroValueByType(type); + defaultElement.put(key, zeroValue); + } } + } else if (fill.equalsIgnoreCase(Fill.NULL.getValue())) { + defaultElement.replaceAll((k, v) -> null); } else { defaultElement.clear(); } @@ -251,15 +249,14 @@ public class ConvertUtil { TreeMap<String, Map<String, Object>> target = Maps.newTreeMap(sources); boolean isTimestamp = StringUtil.isNumeric(sources.firstKey()); - for(Date date : dateList) { + for (Date date : dateList) { String timeKey; if (isTimestamp) { - timeKey = String.valueOf(date.getTime()/1000); + timeKey = String.valueOf(date.getTime() / 1000); } else { timeKey = DateUtils.getFormatDate(date, DateUtils.YYYY_MM_DD_HH24_MM_SS); } - Map<String, Object> metricsMap = sources.get(timeKey); if (StringUtil.isEmpty(metricsMap)) { target.put(timeKey, defaultElement); @@ -267,76 +264,67 @@ public class ConvertUtil { } - if (StringUtil.isEmpty(defaultElement)) { - defaultElement = getDefaultElement(sources.get(sources.firstKey())); - for (String key : target.keySet()) { - if (StringUtil.isEmpty(target.get(key))) { - - Map<String, Object> element= getPositionElement(target, key, fill); - + Map<String, Object> element = getPositionElement(target, key, fill); if (StringUtil.isEmpty(element)) { target.put(key, defaultElement); } else { target.put(key, element); } - - } - - } - } - - return target; } - - + private static Object getZeroValueByType(String type) { + Object defaultValue = null; + if (type.startsWith(DataTypeMapping.ARRAY)) { + defaultValue = Lists.newArrayList(); + } else if (DataTypeMapping.STRING.equalsIgnoreCase(type)) { + defaultValue = ""; + } else if (DataTypeMapping.INT.equalsIgnoreCase(type) || DataTypeMapping.LONG.equalsIgnoreCase(type)) { + defaultValue = 0; + } else if (DataTypeMapping.FLOAT.equalsIgnoreCase(type) || DataTypeMapping.DOUBLE.equalsIgnoreCase(type)) { + defaultValue = 0.0; + } else if (DataTypeMapping.BOOLEAN.equalsIgnoreCase(type)) { + defaultValue = false; + } else if (DataTypeMapping.DATE.equalsIgnoreCase(type) || DataTypeMapping.TIMESTAMP.equalsIgnoreCase(type)) { + defaultValue = new DateTime(0); + } + return defaultValue; + } private static Map<String, Object> getPositionElement(TreeMap<String, Map<String, Object>> target, - String key, String fill) { + String key, String fill) { Map<String, Object> element = Maps.newHashMap(); - if (fill.equalsIgnoreCase(Fill.PREVIOUS.name())) { + if (fill.equalsIgnoreCase(Fill.PREVIOUS.getValue())) { if (StringUtil.isNotEmpty(target.lowerEntry(key))) { element = target.lowerEntry(key).getValue(); } - - - } else if (fill.equalsIgnoreCase(Fill.NEXT.name())) { + } else if (fill.equalsIgnoreCase(Fill.NEXT.getValue())) { if (StringUtil.isNotEmpty(target.higherEntry(key))) { element = target.higherEntry(key).getValue(); } - - } return element; } - private static Map<String, Object> getDefaultElement(Map<String, Object> firstElement) { Map<String, Object> element = Maps.newHashMap(firstElement); for (String key : element.keySet()) { - element.put(key, Fill.NONE.getValue()); + element.put(key, null); } return element; } - - - - - - } diff --git a/src/main/java/com/mesalab/common/utils/sqlparser/ExampleDataHelper.java b/src/main/java/com/mesalab/common/utils/sqlparser/ExampleDataHelper.java index f4d3c4d6..897586e4 100644 --- a/src/main/java/com/mesalab/common/utils/sqlparser/ExampleDataHelper.java +++ b/src/main/java/com/mesalab/common/utils/sqlparser/ExampleDataHelper.java @@ -3,7 +3,6 @@ package com.mesalab.common.utils.sqlparser; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.CharsetUtil; import com.alibaba.fastjson2.JSONPath; import com.google.common.collect.Lists; @@ -39,7 +38,7 @@ public class ExampleDataHelper { public static final String QUERY_TYPE_GROUP_BY = "GroupBy"; public static final String QUERY_TYPE_AGG_STATISTICS = "AggStatistics"; public static final String QUERY_TYPE_OTHER = "Other"; - private static final String[] JSONPATH_SPECIAL_CHARS = {"/", ".", "[", "]", "'", "\""}; + private static final String[] JSONPATH_SPECIAL_CHARS = {"/", ".", "[", "]", "'", "\"", "(", ")"}; private ExampleDataHelper() { } @@ -214,11 +213,10 @@ public class ExampleDataHelper { } private static List getExampleValue(Map<String, String> meta, Object initValue, Boolean isDesc, boolean repeatable, int size, Map<String, List<Object>> schemaDataDict) { - boolean isArray = BooleanUtil.toBoolean(meta.get(MetaConst.IS_ARRAY)); List result = inExampleData(meta, schemaDataDict) ? getExampleDataValues(meta, repeatable, size, schemaDataDict) - : getOtherExampleValues(meta, isDesc, size); - return isArray ? convertToArrayList(result) : result; + : getExampleValuesByType(meta, isDesc, size); + return meta.get("type").startsWith(DataTypeMapping.ARRAY) ? convertToArrayList(result) : result; } private static List<List<Object>> convertToArrayList(List<Object> result) { @@ -227,7 +225,7 @@ public class ExampleDataHelper { .collect(Collectors.toList()); } - private static List getOtherExampleValues(Map<String, String> meta, Boolean isDesc, int size) { + private static List getExampleValuesByType(Map<String, String> meta, Boolean isDesc, int size) { String dataType = meta.get(MetaConst.META_DATA_TYPE) == null ? meta.get(MetaConst.META_TYPE) : meta.get(MetaConst.META_DATA_TYPE); if (DataTypeMapping.LONG.equals(dataType) || DataTypeMapping.INT.equals(dataType)) { return getExampleIntegerValues(null, isDesc, size); diff --git a/src/main/java/com/mesalab/common/utils/sqlparser/SelectItemHelper.java b/src/main/java/com/mesalab/common/utils/sqlparser/SelectItemHelper.java index 09b236d5..8a0ca440 100644 --- a/src/main/java/com/mesalab/common/utils/sqlparser/SelectItemHelper.java +++ b/src/main/java/com/mesalab/common/utils/sqlparser/SelectItemHelper.java @@ -125,7 +125,6 @@ public class SelectItemHelper { AliasColumn aliasColumn = new AliasColumn(); aliasColumn.setName(name); aliasColumn.setFieldName(column.getColumnName()); - aliasColumn.setArray(true); this.aliasExpr = aliasColumn; return; } else if ((expr1 instanceof Parenthesis) && ((Parenthesis) expr1).getExpression() instanceof Column) { @@ -133,7 +132,6 @@ public class SelectItemHelper { AliasColumn aliasColumn = new AliasColumn(); aliasColumn.setName(name); aliasColumn.setFieldName(column.getColumnName()); - aliasColumn.setArray(true); this.aliasExpr = aliasColumn; return; } else if (expr1 instanceof RowConstructor @@ -141,7 +139,6 @@ public class SelectItemHelper { && ((RowConstructor) expr1).getExprList().getExpressions().get(0) instanceof Column) { AliasColumn aliasColumn = new AliasColumn(); aliasColumn.setName(name); - aliasColumn.setArray(true); this.aliasExpr = aliasColumn; return; } @@ -164,7 +161,6 @@ public class SelectItemHelper { public static class AliasObject { private String name; private int index; - private boolean isArray; } @Data diff --git a/src/main/java/com/mesalab/qgw/dialect/ClickHouseDialect.java b/src/main/java/com/mesalab/qgw/dialect/ClickHouseDialect.java index 99970843..03f124eb 100644 --- a/src/main/java/com/mesalab/qgw/dialect/ClickHouseDialect.java +++ b/src/main/java/com/mesalab/qgw/dialect/ClickHouseDialect.java @@ -47,8 +47,9 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { private static final Log log = LogFactory.get(); private static final Pattern pNullable = Pattern.compile("^Nullable\\((.*?)\\)", Pattern.CASE_INSENSITIVE); private static final Pattern pDateTime = Pattern.compile("\\b(DateTime|DateTime64|Date)\\((.*?)\\)", Pattern.CASE_INSENSITIVE); - private static final Pattern pIn = Pattern.compile("(?<!\\bnot)\\s+in\\s*\\(\\s*SELECT\\b", Pattern.CASE_INSENSITIVE); - private static final Pattern pNotIn = Pattern.compile("\\bnot\\s+in\\s*\\(\\s*SELECT\\b", Pattern.CASE_INSENSITIVE); + private static final Pattern pArray = Pattern.compile("^Array\\((.*?)\\)", Pattern.CASE_INSENSITIVE); + private static final Pattern pIn = Pattern.compile("(?<!\\bnot|global)\\s+in\\s*\\(\\s*SELECT\\b", Pattern.CASE_INSENSITIVE); + private static final Pattern pNotIn = Pattern.compile("(?<!\\bnot|global)\\s+not\\s+in\\s*\\(\\s*SELECT\\b", Pattern.CASE_INSENSITIVE); private static final Pattern pUniq = Pattern.compile("count\\s*\\(\\s*distinct\\s*\\((.*?)\\)", Pattern.CASE_INSENSITIVE); private static final Pattern pUniqCombined = Pattern.compile("count\\s*\\(\\s*distinct\\s*\\((.*?)\\)", Pattern.CASE_INSENSITIVE); private static final Pattern pWhere = Pattern.compile("where\\s*", Pattern.CASE_INSENSITIVE); @@ -207,8 +208,7 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { return metaList; } metaList = JsonPath.read(meta, "$"); - metaList.forEach(x -> - { + metaList.forEach(x -> { String type = x.get("type"); Matcher matcher = pNullable.matcher(type); if (matcher.find()) { @@ -218,7 +218,15 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { if (matcher.find()) { type = matcher.group(1); } - x.put("type", metaMap.get(type) == null ? DataTypeMapping.STRING : metaMap.get(type)); + + matcher = pArray.matcher(type); + if (matcher.find()) { + String innerType = matcher.group(1); + String innerTypeMapped = metaMap.get(innerType) == null ? DataTypeMapping.STRING : metaMap.get(innerType); + x.put("type", DataTypeMapping.ARRAY + "(" + innerTypeMapped + ")"); + } else { + x.put("type", metaMap.get(type) == null ? DataTypeMapping.STRING : metaMap.get(type)); + } }); return metaList; } @@ -819,7 +827,6 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { SelectItemHelper.AliasColumn aliasColumn = (SelectItemHelper.AliasColumn) aliasObject; String fieldName = aliasColumn.getFieldName(); meta.put(MetaConst.META_FIELD_NAME, fieldName); - meta.put(MetaConst.IS_ARRAY, String.valueOf(aliasColumn.isArray())); Map schemaInfo = databaseService.getSchemaInfo(MetadataType.FIELDS.getValue(), sqlQueryContext.getDbSelectStatement().getTableNames().get(0), false); Object dateType = JSONPath.extract(JSON.toJSONString(schemaInfo), "$.fields[?(@.name == \"" + fieldName + "\")].doc.constraints.type"); if (dateType instanceof List && ((List<?>) dateType).size() > 0) { diff --git a/src/main/java/com/mesalab/qgw/model/basic/udf/DATETIME_FLOOR_WITH_FILL.java b/src/main/java/com/mesalab/qgw/model/basic/udf/DATETIME_FLOOR_WITH_FILL.java index 6327392a..162c85cf 100644 --- a/src/main/java/com/mesalab/qgw/model/basic/udf/DATETIME_FLOOR_WITH_FILL.java +++ b/src/main/java/com/mesalab/qgw/model/basic/udf/DATETIME_FLOOR_WITH_FILL.java @@ -96,6 +96,7 @@ public class DATETIME_FLOOR_WITH_FILL implements UDF { if (isDryRun) { return results; } + List<Map<String, String>> metaList = (List<Map<String, String>>) baseResult.getMeta(); List<Map<String, Object>> targetResult = Lists.newArrayList(); List<String> groupLabels = Lists.newArrayList(); String timeGranLabel = null; @@ -132,7 +133,7 @@ public class DATETIME_FLOOR_WITH_FILL implements UDF { WhereTimeRange whereTimeRange = getWhereTimeRange(selectStatement); Date benchmarkDate = getBenchmarkDate(resultsFirst, timeGranLabel); - targetResult = fillResultBasedOnTimeSeries(results, groupLabels, timeGranLabel); + targetResult = fillResultBasedOnTimeSeries(results, metaList, groupLabels, timeGranLabel); List<Date> dateRangeList = null; @@ -172,7 +173,7 @@ public class DATETIME_FLOOR_WITH_FILL implements UDF { groupLabels, timeGranLabel); if (StringUtil.isNotEmpty(dateRangeList)) { for (String key : targetTimeSeriesMap.keySet()) { - targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, fill)); + targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, metaList, fill)); } } targetResult = ConvertUtil.convertTimeSeriesToList(targetTimeSeriesMap, groupLabels, timeGranLabel); @@ -264,7 +265,7 @@ public class DATETIME_FLOOR_WITH_FILL implements UDF { } } - private List<Map<String, Object>> fillResultBasedOnTimeSeries(List<Object> results, List<String> groupLabels, String timeGranLabel) { + private List<Map<String, Object>> fillResultBasedOnTimeSeries(List<Object> results, List<Map<String, String>> metaList, List<String> groupLabels, String timeGranLabel) { Map<String, Map<String, Map<String, Object>>> targetTimeSeriesMap = ConvertUtil.convertResultListToTimeSeries(results, groupLabels, timeGranLabel); Set<Date> dateSet = Sets.newHashSet(); @@ -279,7 +280,7 @@ public class DATETIME_FLOOR_WITH_FILL implements UDF { Collections.sort(dateRangeList); if (StringUtil.isNotEmpty(dateRangeList)) { for (String key : targetTimeSeriesMap.keySet()) { - targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, fill)); + targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, metaList, fill)); } } return ConvertUtil.convertTimeSeriesToList(targetTimeSeriesMap, groupLabels, timeGranLabel); diff --git a/src/main/java/com/mesalab/qgw/model/basic/udf/TIME_FLOOR_WITH_FILL.java b/src/main/java/com/mesalab/qgw/model/basic/udf/TIME_FLOOR_WITH_FILL.java index 9d4b0ef7..4a9faf39 100644 --- a/src/main/java/com/mesalab/qgw/model/basic/udf/TIME_FLOOR_WITH_FILL.java +++ b/src/main/java/com/mesalab/qgw/model/basic/udf/TIME_FLOOR_WITH_FILL.java @@ -97,6 +97,7 @@ public class TIME_FLOOR_WITH_FILL implements UDF { if (isDryRun) { return results; } + List<Map<String, String>> metaList = (List<Map<String, String>>) baseResult.getMeta(); List<Map<String, Object>> targetResult = Lists.newArrayList(); List<String> groupLabels = Lists.newArrayList(); String timeGranLabel = null; @@ -133,7 +134,7 @@ public class TIME_FLOOR_WITH_FILL implements UDF { WhereTimeRange whereTimeRange = getWhereTimeRange(selectStatement); Date benchmarkDate = getBenchmarkDate(resultsFirst, timeGranLabel); - targetResult = fillResultBasedOnTimeSeries(results, groupLabels, timeGranLabel); + targetResult = fillResultBasedOnTimeSeries(results, metaList, groupLabels, timeGranLabel); List<Date> dateRangeList = null; @@ -173,7 +174,7 @@ public class TIME_FLOOR_WITH_FILL implements UDF { groupLabels, timeGranLabel); if (StringUtil.isNotEmpty(dateRangeList)) { for (String key : targetTimeSeriesMap.keySet()) { - targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, fill)); + targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, metaList, fill)); } } targetResult = ConvertUtil.convertTimeSeriesToList(targetTimeSeriesMap, groupLabels, timeGranLabel); @@ -287,7 +288,7 @@ public class TIME_FLOOR_WITH_FILL implements UDF { return targetResult; } - private List<Map<String, Object>> fillResultBasedOnTimeSeries(List<Object> results, List<String> groupLabels, String timeGranLabel) { + private List<Map<String, Object>> fillResultBasedOnTimeSeries(List<Object> results, List<Map<String, String>> metaList, List<String> groupLabels, String timeGranLabel) { Map<String, Map<String, Map<String, Object>>> targetTimeSeriesMap = ConvertUtil.convertResultListToTimeSeries(results, groupLabels, timeGranLabel); Set<Date> dateSet = Sets.newHashSet(); @@ -302,7 +303,7 @@ public class TIME_FLOOR_WITH_FILL implements UDF { Collections.sort(dateRangeList); if (StringUtil.isNotEmpty(dateRangeList)) { for (String key : targetTimeSeriesMap.keySet()) { - targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, fill)); + targetTimeSeriesMap.put(key, ConvertUtil.completeTimeseries((TreeMap<String, Map<String, Object>>) targetTimeSeriesMap.get(key), dateRangeList, metaList, fill)); } } return ConvertUtil.convertTimeSeriesToList(targetTimeSeriesMap, groupLabels, timeGranLabel); |
