[improvement][chat]Consider Chinese date fields in MetricCheckProcessor for data (#460)

This commit is contained in:
lexluo09
2023-12-01 11:30:23 +08:00
committed by GitHub
parent a862a83272
commit c98d15059b
2 changed files with 12 additions and 7 deletions

View File

@@ -79,8 +79,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
} }
} }
for (String dimensionName : whereFields) { for (String dimensionName : whereFields) {
if (TimeDimensionEnum.getNameList().contains(dimensionName) if (TimeDimensionEnum.containsTimeDimension(dimensionName)) {
|| TimeDimensionEnum.getChNameList().contains(dimensionName)) {
continue; continue;
} }
if (!checkInModelSchema(dimensionName, SchemaElementType.DIMENSION, semanticSchema)) { if (!checkInModelSchema(dimensionName, SchemaElementType.DIMENSION, semanticSchema)) {
@@ -91,8 +90,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
} }
} }
for (String dimensionName : groupByFields) { for (String dimensionName : groupByFields) {
if (TimeDimensionEnum.getNameList().contains(dimensionName) if (TimeDimensionEnum.containsTimeDimension(dimensionName)) {
|| TimeDimensionEnum.getChNameList().contains(dimensionName)) {
continue; continue;
} }
if (!checkInModelSchema(dimensionName, SchemaElementType.DIMENSION, semanticSchema)) { if (!checkInModelSchema(dimensionName, SchemaElementType.DIMENSION, semanticSchema)) {
@@ -110,7 +108,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
* eg: metric like UV is calculated in a certain dimension, it cannot be used on other dimensions. * eg: metric like UV is calculated in a certain dimension, it cannot be used on other dimensions.
*/ */
private boolean checkNecessaryDimension(SchemaElement metric, SemanticSchema semanticSchema, private boolean checkNecessaryDimension(SchemaElement metric, SemanticSchema semanticSchema,
List<String> dimensionFields) { List<String> dimensionFields) {
List<String> necessaryDimensions = getNecessaryDimensionNames(metric, semanticSchema); List<String> necessaryDimensions = getNecessaryDimensionNames(metric, semanticSchema);
if (CollectionUtils.isEmpty(necessaryDimensions)) { if (CollectionUtils.isEmpty(necessaryDimensions)) {
return true; return true;
@@ -128,7 +126,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
* eg: some descriptive dimensions are not suitable as drill-down dimensions * eg: some descriptive dimensions are not suitable as drill-down dimensions
*/ */
private boolean checkDrillDownDimension(String dimensionName, List<String> metrics, private boolean checkDrillDownDimension(String dimensionName, List<String> metrics,
SemanticSchema semanticSchema) { SemanticSchema semanticSchema) {
List<SchemaElement> metricElements = semanticSchema.getMetrics().stream() List<SchemaElement> metricElements = semanticSchema.getMetrics().stream()
.filter(schemaElement -> metrics.contains(schemaElement.getName())) .filter(schemaElement -> metrics.contains(schemaElement.getName()))
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -208,7 +206,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
} }
private static String removeFieldInSql(String sql, Set<String> metricToRemove, private static String removeFieldInSql(String sql, Set<String> metricToRemove,
Set<String> dimensionByToRemove, Set<String> whereFieldsToRemove) { Set<String> dimensionByToRemove, Set<String> whereFieldsToRemove) {
sql = SqlParserRemoveHelper.removeWhereCondition(sql, whereFieldsToRemove); sql = SqlParserRemoveHelper.removeWhereCondition(sql, whereFieldsToRemove);
sql = SqlParserRemoveHelper.removeSelect(sql, metricToRemove); sql = SqlParserRemoveHelper.removeSelect(sql, metricToRemove);
sql = SqlParserRemoveHelper.removeSelect(sql, dimensionByToRemove); sql = SqlParserRemoveHelper.removeSelect(sql, dimensionByToRemove);

View File

@@ -24,6 +24,13 @@ public enum TimeDimensionEnum {
this.chName = chName; this.chName = chName;
} }
public static boolean containsTimeDimension(String fieldName) {
if (getNameList().contains(fieldName) || getChNameList().contains(fieldName)) {
return true;
}
return false;
}
public static List<String> getNameList() { public static List<String> getNameList() {
return Arrays.stream(TimeDimensionEnum.values()).map(TimeDimensionEnum::getName).collect(Collectors.toList()); return Arrays.stream(TimeDimensionEnum.values()).map(TimeDimensionEnum::getName).collect(Collectors.toList());
} }