diff --git a/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/Regular.java b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/Regular.java new file mode 100644 index 0000000..c48bd9f --- /dev/null +++ b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/Regular.java @@ -0,0 +1,20 @@ +package cn.datax.service.data.quality.api.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ch + * @date 2023/12/25 17:18 + * + * 正则校验 + */ +@Data +public class Regular implements Serializable { + + /** + * 正则表达 + */ + private String regular; +} diff --git a/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/RuleConfig.java b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/RuleConfig.java index 9d21177..147c2e0 100644 --- a/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/RuleConfig.java +++ b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/dto/RuleConfig.java @@ -32,4 +32,11 @@ public class RuleConfig implements Serializable { * 准确性 */ private Accuracy accuracy; + + /** + * 正则表达 + */ + + private Regular regular; + } diff --git a/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/enums/RuleItem.java b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/enums/RuleItem.java index 94ad401..8f129e0 100644 --- a/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/enums/RuleItem.java +++ b/studio/modules/data-quality-service-parent/data-quality-service-api/src/main/java/cn/datax/service/data/quality/api/enums/RuleItem.java @@ -7,6 +7,8 @@ public enum RuleItem { Integrity("integrity_key", "验证表中必须出现的字段非空"), Relevance("relevance_key", "验证关联性"), Timeliness("timeliness_key", "验证及时性"), + Regular("regular_key","正则表达式"), + Consistent("consistent_key", "验证用户指定的字段枚举值是否合乎要求"); private final String code; diff --git a/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RegularRule.java b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RegularRule.java new file mode 100644 index 0000000..569be0b --- /dev/null +++ b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RegularRule.java @@ -0,0 +1,40 @@ +package cn.datax.service.data.quality.schedule.rules; + +import cn.datax.common.database.constants.DbType; + +import java.util.Map; + +/** + * @author ch + * @date 2023/12/25 18:14 + */ +public class RegularRule implements RuleItem{ + private static String REGULAR = "regular"; + + @Override + public String parse(DbType dbType, String table, String column, Map map) { + final StringBuilder builder = new StringBuilder(); + switch (dbType) { + case ORACLE: + case ORACLE_12C: + builder.append("SELECT SUM(CASE WHEN ROUND(TO_NUMBER(SYSDATE - ").append(column).append(")) >= ").append(map.get(REGULAR)).append(" THEN 1 ELSE 0 END), COUNT(*) FROM ").append(table); + break; + case MYSQL: + builder.append("select sum(case when ").append(column).append(" REGEXP ").append("'"+map.get(REGULAR)+"'").append(" != '' THEN 0 ELSE 1 END),") + .append(" COUNT(*) from ").append(table); + case MARIADB: + case SQL_SERVER: + case SQL_SERVER2008: + case POSTGRE_SQL: + case OTHER: + default: + break; + } + return builder.toString(); + } + + @Override + public String code() { + return "timeliness_key"; + } +} diff --git a/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RuleItemRegistry.java b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RuleItemRegistry.java index e7b6cc7..50e0715 100644 --- a/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RuleItemRegistry.java +++ b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/schedule/rules/RuleItemRegistry.java @@ -1,5 +1,7 @@ package cn.datax.service.data.quality.schedule.rules; +import cn.datax.service.data.quality.api.dto.Regular; + import java.util.HashMap; import java.util.Map; @@ -13,6 +15,7 @@ public class RuleItemRegistry { this.rule_item_map.put("integrity_key", new IntegrityRule()); this.rule_item_map.put("relevance_key", new RelevanceRule()); this.rule_item_map.put("timeliness_key", new TimelinessRule()); + this.rule_item_map.put("regular_key", new RegularRule()); this.rule_item_map.put("accuracy_key_length", new AccuracyLengthRule()); } diff --git a/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/service/impl/CheckRuleServiceImpl.java b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/service/impl/CheckRuleServiceImpl.java index 8403f7b..f1b6c75 100644 --- a/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/service/impl/CheckRuleServiceImpl.java +++ b/studio/modules/data-quality-service-parent/data-quality-service/src/main/java/cn/datax/service/data/quality/service/impl/CheckRuleServiceImpl.java @@ -4,12 +4,7 @@ import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.core.RedisConstant; import cn.datax.common.database.constants.DbType; import cn.datax.common.redis.service.RedisService; -import cn.datax.service.data.quality.api.dto.Accuracy; -import cn.datax.service.data.quality.api.dto.CheckRuleDto; -import cn.datax.service.data.quality.api.dto.Consistent; -import cn.datax.service.data.quality.api.dto.Relevance; -import cn.datax.service.data.quality.api.dto.RuleConfig; -import cn.datax.service.data.quality.api.dto.Timeliness; +import cn.datax.service.data.quality.api.dto.*; import cn.datax.service.data.quality.api.entity.CheckRuleEntity; import cn.datax.service.data.quality.api.enums.RuleItem; import cn.datax.service.data.quality.dao.CheckRuleDao; @@ -132,6 +127,11 @@ public class CheckRuleServiceImpl extends BaseServiceImpl