Search in sources :

Example 1 with MultiDataSourceJoinColumnRequest

use of com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest in project Qualitis by WeBankFinTech.

the class RuleBatchServiceImpl method getMultiDataSourceJoinRequest.

private void getMultiDataSourceJoinRequest(List<MultiDataSourceJoinConfigRequest> mappings, ExcelMultiTemplateRuleByProject excelMultiTemplateRule) throws UnExpectedRequestException {
    String leftStatement = excelMultiTemplateRule.getLeftMappingStatement();
    if (StringUtils.isNotBlank(leftStatement)) {
        MultiDataSourceJoinConfigRequest mapping = new MultiDataSourceJoinConfigRequest();
        List<MultiDataSourceJoinColumnRequest> leftRequest = getMultiDataSourceJoinColumnRequest(excelMultiTemplateRule.getLeftMappingNames(), excelMultiTemplateRule.getLeftMappingTypes());
        List<MultiDataSourceJoinColumnRequest> rightRequest = getMultiDataSourceJoinColumnRequest(excelMultiTemplateRule.getRightMappingNames(), excelMultiTemplateRule.getRightMappingTypes());
        mapping.setLeft(leftRequest);
        mapping.setLeftStatement(excelMultiTemplateRule.getLeftMappingStatement());
        mapping.setOperation(MappingOperationEnum.getOperationCode(excelMultiTemplateRule.getMappingOperation()));
        mapping.setRight(rightRequest);
        mapping.setRightStatement(excelMultiTemplateRule.getRightMappingStatement());
        mappings.add(mapping);
    }
}
Also used : MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest)

Example 2 with MultiDataSourceJoinColumnRequest

use of com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest in project Qualitis by WeBankFinTech.

the class AutoArgumentAdapter method generateAndConcatStatement.

private String generateAndConcatStatement(TemplateMidTableInputMeta templateMidTableInputMeta, List<MultiDataSourceJoinConfigRequest> mappings, Rule rule) {
    String concatTemplate = templateMidTableInputMeta.getConcatTemplate();
    Collection<TemplateMidTableInputMeta> children = templateMidTableInputMeta.getChildren();
    List<String> originStatement = new ArrayList<>();
    if (rule.getTemplate().getMidTableAction().contains(DIFF_COUNT)) {
        MultiDataSourceJoinConfigRequest multiDataSourceJoinConfigRequest = new MultiDataSourceJoinConfigRequest();
        MultiDataSourceJoinColumnRequest leftJoinColumnRequest = new MultiDataSourceJoinColumnRequest("tmp1.".concat(DIFF_COUNT), "int");
        MultiDataSourceJoinColumnRequest rightJoinColumnRequest = new MultiDataSourceJoinColumnRequest("tmp2.".concat(DIFF_COUNT), "int");
        multiDataSourceJoinConfigRequest.setOperation(MappingOperationEnum.EQUAL.getCode());
        multiDataSourceJoinConfigRequest.setLeft(Arrays.asList(leftJoinColumnRequest));
        multiDataSourceJoinConfigRequest.setRight(Arrays.asList(rightJoinColumnRequest));
        multiDataSourceJoinConfigRequest.setLeftStatement("tmp1.".concat(DIFF_COUNT));
        multiDataSourceJoinConfigRequest.setRightStatement("tmp2.".concat(DIFF_COUNT));
        mappings.add(multiDataSourceJoinConfigRequest);
    }
    for (MultiDataSourceJoinConfigRequest mapping : mappings) {
        String replacedTemplate = concatTemplate;
        Boolean addedFlag = false;
        for (TemplateMidTableInputMeta child : children) {
            if (child.getInputType().equals(TemplateInputTypeEnum.LEFT_STATEMENT.getCode())) {
                replacedTemplate = replacedTemplate.replace(getPlaceHolder(child.getPlaceholder()), mapping.getLeftStatement());
            } else if (child.getInputType().equals(TemplateInputTypeEnum.OPERATION.getCode())) {
                replacedTemplate = replacedTemplate.replace(getPlaceHolder(child.getPlaceholder()), MappingOperationEnum.getByCode(mapping.getOperation()).getSymbol());
            } else if (child.getInputType().equals(TemplateInputTypeEnum.RIGHT_STATEMENT.getCode())) {
                replacedTemplate = replacedTemplate.replace(getPlaceHolder(child.getPlaceholder()), mapping.getRightStatement());
            } else if (child.getInputType().equals(TemplateInputTypeEnum.SOURCE_FIELD.getCode())) {
                for (MultiDataSourceJoinColumnRequest multiDataSourceJoinColumnRequest : mapping.getLeft()) {
                    String tmp1 = concatTemplate.replace(getPlaceHolder(child.getPlaceholder()), multiDataSourceJoinColumnRequest.getColumnName());
                    originStatement.add(tmp1);
                    addedFlag = true;
                }
            } else if (child.getInputType().equals(TemplateInputTypeEnum.TARGET_FIELD.getCode())) {
                for (MultiDataSourceJoinColumnRequest multiDataSourceJoinColumnRequest : mapping.getRight()) {
                    String tmp1 = concatTemplate.replace(getPlaceHolder(child.getPlaceholder()), multiDataSourceJoinColumnRequest.getColumnName());
                    originStatement.add(tmp1);
                    addedFlag = true;
                }
            }
        }
        if (!addedFlag) {
            originStatement.add(replacedTemplate);
        }
    }
    return generateStatementByConcatStr(originStatement, "AND");
}
Also used : MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest) TemplateMidTableInputMeta(com.webank.wedatasphere.qualitis.rule.entity.TemplateMidTableInputMeta)

Example 3 with MultiDataSourceJoinColumnRequest

use of com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest in project Qualitis by WeBankFinTech.

the class AddMultiRuleRequestBuilder method solveMapping.

private void solveMapping(String mappings, Map<String, List<ColumnInfoDetail>> colsMap) {
    List<MultiDataSourceJoinConfigRequest> requests = new ArrayList<>();
    String[] mappingStrs = mappings.split(AND);
    for (String currentMapping : mappingStrs) {
        List<MultiDataSourceJoinColumnRequest> left = new ArrayList<>();
        List<MultiDataSourceJoinColumnRequest> right = new ArrayList<>();
        MultiDataSourceJoinConfigRequest multiDataSourceJoinConfigRequest = new MultiDataSourceJoinConfigRequest();
        Iterator operator = OPERATION_CODE.entrySet().iterator();
        while (operator.hasNext()) {
            Entry entry = (Entry) operator.next();
            if (currentMapping.contains(entry.getKey().toString())) {
                multiDataSourceJoinConfigRequest.setOperation((Integer) entry.getValue());
                String[] statements = currentMapping.split(entry.getKey().toString());
                String leftStatement = statements[0];
                String rightStatement = statements[1];
                multiDataSourceJoinConfigRequest.setLeftStatement(leftStatement);
                multiDataSourceJoinConfigRequest.setRightStatement(rightStatement);
                // Statement to request
                parseStatementColumns(colsMap.get(TMP_1), left, leftStatement);
                parseStatementColumns(colsMap.get(TMP_2), right, rightStatement);
                multiDataSourceJoinConfigRequest.setLeft(left);
                multiDataSourceJoinConfigRequest.setRight(right);
                break;
            }
        }
        requests.add(multiDataSourceJoinConfigRequest);
    }
    addMultiSourceRuleRequest.setMappings(requests);
}
Also used : MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) Entry(java.util.Map.Entry) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator)

Example 4 with MultiDataSourceJoinColumnRequest

use of com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest in project Qualitis by WeBankFinTech.

the class RuleNodeServiceImpl method constructMultiRequest.

private AddMultiSourceRuleRequest constructMultiRequest(Rule rule, RuleGroup ruleGroup) {
    AddMultiSourceRuleRequest addMultiSourceRuleRequest = new AddMultiSourceRuleRequest();
    String newVersion = ruleGroup.getVersion();
    if (StringUtils.isEmpty(newVersion)) {
        String newRuleName = rule.getName() + "_copy_" + ruleGroup.getId();
        LOGGER.info("Multi rule start to be copied. Copied rule name: " + newRuleName);
        addMultiSourceRuleRequest.setRuleName(newRuleName);
        if (StringUtils.isNotBlank(rule.getCnName())) {
            addMultiSourceRuleRequest.setRuleCnName(rule.getCnName() + "_副本");
        }
    } else {
        String oldVersion = rule.getRuleGroup().getVersion();
        LOGGER.info("Multi rule start to be copied. Copied rule name: " + rule.getName() + "_" + ruleGroup.getVersion());
        if (StringUtils.isNotBlank(oldVersion) && rule.getName().endsWith(oldVersion)) {
            addMultiSourceRuleRequest.setRuleName(rule.getName().replace(oldVersion, newVersion));
            if (StringUtils.isNotBlank(rule.getCnName())) {
                addMultiSourceRuleRequest.setRuleCnName(rule.getCnName().replace(oldVersion, newVersion));
            }
        } else {
            addMultiSourceRuleRequest.setRuleName(rule.getName() + "_" + newVersion);
            if (StringUtils.isNotBlank(rule.getCnName())) {
                addMultiSourceRuleRequest.setRuleCnName(rule.getCnName() + "_" + newVersion);
            }
        }
    }
    String ruleDetail = rule.getDetail();
    String clusterName = rule.getRuleDataSources().iterator().next().getClusterName();
    addMultiSourceRuleRequest.setAbortOnFailure(rule.getAbortOnFailure());
    addMultiSourceRuleRequest.setClusterName(clusterName);
    addMultiSourceRuleRequest.setRuleDetail(ruleDetail);
    addMultiSourceRuleRequest.setCsId(rule.getCsId());
    addMultiSourceRuleRequest.setSpecifyStaticStartupParam(rule.getSpecifyStaticStartupParam());
    addMultiSourceRuleRequest.setDeleteFailCheckResult(rule.getDeleteFailCheckResult());
    addMultiSourceRuleRequest.setMultiSourceRuleTemplateId(rule.getTemplate().getId());
    addMultiSourceRuleRequest.setStaticStartupParam(rule.getStaticStartupParam());
    addMultiSourceRuleRequest.setProjectId(ruleGroup.getProjectId());
    addMultiSourceRuleRequest.setRuleGroupId(ruleGroup.getId());
    List<RuleVariable> filterRuleVariable = rule.getRuleVariables().stream().filter(ruleVariable -> ruleVariable.getTemplateMidTableInputMeta().getInputType().equals(TemplateInputTypeEnum.CONDITION.getCode())).collect(Collectors.toList());
    if (filterRuleVariable != null && filterRuleVariable.size() != 0) {
        addMultiSourceRuleRequest.setFilter(filterRuleVariable.iterator().next().getValue());
    }
    // Data source request
    for (RuleDataSource ruleDataSource : rule.getRuleDataSources()) {
        String databaseName = ruleDataSource.getDbName();
        String tableName = ruleDataSource.getTableName();
        String filter = ruleDataSource.getFilter();
        Integer datasourceIndex = ruleDataSource.getDatasourceIndex();
        MultiDataSourceConfigRequest dataSourceConfigRequest = new MultiDataSourceConfigRequest();
        dataSourceConfigRequest.setDbName(databaseName);
        dataSourceConfigRequest.setTableName(tableName);
        dataSourceConfigRequest.setFilter(filter);
        dataSourceConfigRequest.setProxyUser(ruleDataSource.getProxyUser());
        if (ruleDataSource.getLinkisDataSourceId() != null) {
            dataSourceConfigRequest.setLinkisDataSourceType(TemplateDataSourceTypeEnum.getMessage(ruleDataSource.getDatasourceType()));
            dataSourceConfigRequest.setLinkisDataSourceName(ruleDataSource.getLinkisDataSourceName());
            dataSourceConfigRequest.setLinkisDataSourceId(ruleDataSource.getLinkisDataSourceId());
        }
        if (datasourceIndex == 0) {
            addMultiSourceRuleRequest.setSource(dataSourceConfigRequest);
        } else {
            addMultiSourceRuleRequest.setTarget(dataSourceConfigRequest);
        }
    }
    // Mapping
    List<MultiDataSourceJoinConfigRequest> mappings = new ArrayList<>();
    for (RuleDataSourceMapping mapping : rule.getRuleDataSourceMappings()) {
        MultiDataSourceJoinConfigRequest multiDataSourceJoinConfigRequest = new MultiDataSourceJoinConfigRequest();
        multiDataSourceJoinConfigRequest.setOperation(mapping.getOperation());
        multiDataSourceJoinConfigRequest.setLeftStatement(mapping.getLeftStatement());
        multiDataSourceJoinConfigRequest.setRightStatement(mapping.getRightStatement());
        List<MultiDataSourceJoinColumnRequest> left = getMultiDataSourceJoinColumnRequest(mapping.getLeftColumnNames(), mapping.getLeftColumnTypes());
        List<MultiDataSourceJoinColumnRequest> right = getMultiDataSourceJoinColumnRequest(mapping.getRightColumnNames(), mapping.getLeftColumnTypes());
        multiDataSourceJoinConfigRequest.setLeft(left);
        multiDataSourceJoinConfigRequest.setRight(right);
        mappings.add(multiDataSourceJoinConfigRequest);
    }
    addMultiSourceRuleRequest.setMappings(mappings);
    List<AlarmConfigRequest> alarmConfigRequests = constructAlarmConfigRequest(rule.getAlarmConfigs());
    addMultiSourceRuleRequest.setAlarm(true);
    addMultiSourceRuleRequest.setAlarmVariable(alarmConfigRequests);
    return addMultiSourceRuleRequest;
}
Also used : RuleDataSourceMappingDao(com.webank.wedatasphere.qualitis.rule.dao.RuleDataSourceMappingDao) Arrays(java.util.Arrays) StringUtils(org.apache.commons.lang.StringUtils) TemplateOutputMetaService(com.webank.wedatasphere.qualitis.rule.service.TemplateOutputMetaService) Autowired(org.springframework.beans.factory.annotation.Autowired) JsonProcessingException(org.codehaus.jackson.JsonProcessingException) GeneralResponse(com.webank.wedatasphere.qualitis.response.GeneralResponse) AlarmConfig(com.webank.wedatasphere.qualitis.rule.entity.AlarmConfig) RuleMetricDao(com.webank.wedatasphere.qualitis.dao.RuleMetricDao) DeleteRuleRequest(com.webank.wedatasphere.qualitis.rule.request.DeleteRuleRequest) OuterWorkflowService(com.webank.wedatasphere.qualitis.project.service.OuterWorkflowService) MultiDataSourceConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceConfigRequest) RuleNodeRequests(com.webank.wedatasphere.qualitis.rule.request.RuleNodeRequests) FileOutputUnitEnum(com.webank.wedatasphere.qualitis.rule.constant.FileOutputUnitEnum) TemplateMidTableInputMeta(com.webank.wedatasphere.qualitis.rule.entity.TemplateMidTableInputMeta) AddMultiSourceRuleRequest(com.webank.wedatasphere.qualitis.rule.request.multi.AddMultiSourceRuleRequest) Set(java.util.Set) TemplateDataSourceType(com.webank.wedatasphere.qualitis.rule.entity.TemplateDataSourceType) DataSourceRequest(com.webank.wedatasphere.qualitis.rule.request.DataSourceRequest) TemplateMidTableInputMetaService(com.webank.wedatasphere.qualitis.rule.service.TemplateMidTableInputMetaService) TypeReference(org.codehaus.jackson.type.TypeReference) RuleDataSourceMappingService(com.webank.wedatasphere.qualitis.rule.service.RuleDataSourceMappingService) RuleNodeRequest(com.webank.wedatasphere.qualitis.rule.request.RuleNodeRequest) TemplateStatisticsInputMeta(com.webank.wedatasphere.qualitis.rule.entity.TemplateStatisticsInputMeta) FileAlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.FileAlarmConfigRequest) TemplateArgumentRequest(com.webank.wedatasphere.qualitis.rule.request.TemplateArgumentRequest) Project(com.webank.wedatasphere.qualitis.project.entity.Project) RuleDataSourceDao(com.webank.wedatasphere.qualitis.rule.dao.RuleDataSourceDao) Rule(com.webank.wedatasphere.qualitis.rule.entity.Rule) ProjectDao(com.webank.wedatasphere.qualitis.project.dao.ProjectDao) ArrayList(java.util.ArrayList) TemplateDataSourceTypeDao(com.webank.wedatasphere.qualitis.rule.dao.TemplateDataSourceTypeDao) CheckTemplateEnum(com.webank.wedatasphere.qualitis.rule.constant.CheckTemplateEnum) Service(org.springframework.stereotype.Service) TemplateStatisticsInputMetaService(com.webank.wedatasphere.qualitis.rule.service.TemplateStatisticsInputMetaService) RuleTemplateService(com.webank.wedatasphere.qualitis.rule.service.RuleTemplateService) RuleVariableService(com.webank.wedatasphere.qualitis.rule.service.RuleVariableService) RoleService(com.webank.wedatasphere.qualitis.service.RoleService) DataSourceColumnRequest(com.webank.wedatasphere.qualitis.rule.request.DataSourceColumnRequest) CustomAlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.CustomAlarmConfigRequest) IOException(java.io.IOException) FileRuleService(com.webank.wedatasphere.qualitis.rule.service.FileRuleService) TemplateInputTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.TemplateInputTypeEnum) MultiSourceRuleService(com.webank.wedatasphere.qualitis.rule.service.MultiSourceRuleService) TemplateDataSourceTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.TemplateDataSourceTypeEnum) RuleMetricDepartmentUserDao(com.webank.wedatasphere.qualitis.dao.RuleMetricDepartmentUserDao) UserDao(com.webank.wedatasphere.qualitis.dao.UserDao) RuleNodeService(com.webank.wedatasphere.qualitis.rule.service.RuleNodeService) ObjectMapper(org.codehaus.jackson.map.ObjectMapper) LocalConfig(com.webank.wedatasphere.qualitis.LocalConfig) LoggerFactory(org.slf4j.LoggerFactory) TemplateMidTableUtil(com.webank.wedatasphere.qualitis.rule.util.TemplateMidTableUtil) SemanticException(org.apache.hadoop.hive.ql.parse.SemanticException) JsonNode(org.codehaus.jackson.JsonNode) PermissionDeniedRequestException(com.webank.wedatasphere.qualitis.exception.PermissionDeniedRequestException) RuleDataSource(com.webank.wedatasphere.qualitis.rule.entity.RuleDataSource) ParseException(org.apache.hadoop.hive.ql.parse.ParseException) RuleGroupDao(com.webank.wedatasphere.qualitis.rule.dao.RuleGroupDao) ProjectService(com.webank.wedatasphere.qualitis.project.service.ProjectService) AddCustomRuleRequest(com.webank.wedatasphere.qualitis.rule.request.AddCustomRuleRequest) AlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.AlarmConfigRequest) ExcelMultiTemplateRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelMultiTemplateRuleByProject) TemplateOutputMetaDao(com.webank.wedatasphere.qualitis.rule.dao.TemplateOutputMetaDao) MappingOperationEnum(com.webank.wedatasphere.qualitis.rule.constant.MappingOperationEnum) InputActionStepEnum(com.webank.wedatasphere.qualitis.rule.constant.InputActionStepEnum) CustomRuleService(com.webank.wedatasphere.qualitis.rule.service.CustomRuleService) UuidGenerator(com.webank.wedatasphere.qualitis.util.UuidGenerator) CopyRuleRequest(com.webank.wedatasphere.qualitis.rule.request.CopyRuleRequest) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) RuleDataSourceMapping(com.webank.wedatasphere.qualitis.rule.entity.RuleDataSourceMapping) MetaDataAcquireFailedException(com.webank.wedatasphere.qualitis.metadata.exception.MetaDataAcquireFailedException) RuleService(com.webank.wedatasphere.qualitis.rule.service.RuleService) List(java.util.List) RoleNotFoundException(javax.management.relation.RoleNotFoundException) AlarmConfigDao(com.webank.wedatasphere.qualitis.rule.dao.AlarmConfigDao) CommonChecker(com.webank.wedatasphere.qualitis.project.request.CommonChecker) UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) RuleNodeResponses(com.webank.wedatasphere.qualitis.rule.response.RuleNodeResponses) RuleNodeResponse(com.webank.wedatasphere.qualitis.rule.response.RuleNodeResponse) AlarmConfigService(com.webank.wedatasphere.qualitis.rule.service.AlarmConfigService) RuleGroup(com.webank.wedatasphere.qualitis.rule.entity.RuleGroup) SpecCharEnum(com.webank.wedatasphere.qualitis.constant.SpecCharEnum) RuleVariableDao(com.webank.wedatasphere.qualitis.rule.dao.RuleVariableDao) RuleVariable(com.webank.wedatasphere.qualitis.rule.entity.RuleVariable) RuleDataSourceService(com.webank.wedatasphere.qualitis.rule.service.RuleDataSourceService) UserRoleDao(com.webank.wedatasphere.qualitis.dao.UserRoleDao) AddFileRuleRequest(com.webank.wedatasphere.qualitis.rule.request.AddFileRuleRequest) HashSet(java.util.HashSet) User(com.webank.wedatasphere.qualitis.entity.User) CollectionUtils(org.apache.commons.collections.CollectionUtils) Propagation(org.springframework.transaction.annotation.Propagation) RuleTemplateDao(com.webank.wedatasphere.qualitis.rule.dao.RuleTemplateDao) TemplateOutputMeta(com.webank.wedatasphere.qualitis.rule.entity.TemplateOutputMeta) CompareTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.CompareTypeEnum) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest) AddRuleRequest(com.webank.wedatasphere.qualitis.rule.request.AddRuleRequest) Logger(org.slf4j.Logger) ExcelTemplateFileRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelTemplateFileRuleByProject) Iterator(java.util.Iterator) RuleMetric(com.webank.wedatasphere.qualitis.entity.RuleMetric) Template(com.webank.wedatasphere.qualitis.rule.entity.Template) ProjectTypeEnum(com.webank.wedatasphere.qualitis.project.constant.ProjectTypeEnum) RuleResponse(com.webank.wedatasphere.qualitis.rule.response.RuleResponse) FunctionTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.FunctionTypeEnum) UserService(com.webank.wedatasphere.qualitis.service.UserService) FileOutputNameEnum(com.webank.wedatasphere.qualitis.rule.constant.FileOutputNameEnum) RuleTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.RuleTypeEnum) RuleDao(com.webank.wedatasphere.qualitis.rule.dao.RuleDao) MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) ModifyRuleRequest(com.webank.wedatasphere.qualitis.rule.request.ModifyRuleRequest) Comparator(java.util.Comparator) StringEscapeUtils(org.apache.commons.lang.StringEscapeUtils) Transactional(org.springframework.transaction.annotation.Transactional) RuleDataSourceMapping(com.webank.wedatasphere.qualitis.rule.entity.RuleDataSourceMapping) RuleDataSource(com.webank.wedatasphere.qualitis.rule.entity.RuleDataSource) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest) ArrayList(java.util.ArrayList) MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) FileAlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.FileAlarmConfigRequest) CustomAlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.CustomAlarmConfigRequest) AlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.AlarmConfigRequest) MultiDataSourceConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceConfigRequest) AddMultiSourceRuleRequest(com.webank.wedatasphere.qualitis.rule.request.multi.AddMultiSourceRuleRequest) RuleVariable(com.webank.wedatasphere.qualitis.rule.entity.RuleVariable)

Example 5 with MultiDataSourceJoinColumnRequest

use of com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest in project Qualitis by WeBankFinTech.

the class MetaDataServiceImpl method constructRequest.

private AddMultiSourceRuleRequest constructRequest(MulDbRequest request, FilterRequest filterRequest, String currentSourceTable, String currentTargetTable, int index, int total, String loginUser) throws UnExpectedRequestException, MetaDataAcquireFailedException, IOException {
    LOGGER.info("Start to construct add multi source rule request.");
    // rule basic info.
    AddMultiSourceRuleRequest addMultiSourceRuleRequest = new AddMultiSourceRuleRequest();
    basicInfo(addMultiSourceRuleRequest, request, index, total);
    MultiDataSourceConfigRequest sourceConfigRequest = new MultiDataSourceConfigRequest();
    sourceConfigRequest.setLinkisDataSourceName(request.getSourceLinkisDataSourceName());
    sourceConfigRequest.setLinkisDataSourceType(request.getSourceLinkisDataSourceType());
    sourceConfigRequest.setLinkisDataSourceId(request.getSourceLinkisDataSourceId());
    sourceConfigRequest.setProxyUser(request.getProxyUser());
    sourceConfigRequest.setDbName(request.getSourceDb());
    sourceConfigRequest.setContextService(false);
    MultiDataSourceConfigRequest targetConfigRequest = new MultiDataSourceConfigRequest();
    targetConfigRequest.setLinkisDataSourceName(request.getTargetLinkisDataSourceName());
    targetConfigRequest.setLinkisDataSourceType(request.getTargetLinkisDataSourceType());
    targetConfigRequest.setLinkisDataSourceId(request.getTargetLinkisDataSourceId());
    targetConfigRequest.setProxyUser(request.getProxyUser());
    targetConfigRequest.setDbName(request.getTargetDb());
    targetConfigRequest.setContextService(false);
    if (filterRequest == null) {
        // source table and target table
        sourceConfigRequest.setTableName(currentSourceTable);
        sourceConfigRequest.setFilter("true");
        targetConfigRequest.setTableName(currentTargetTable);
        targetConfigRequest.setFilter("true");
        addMultiSourceRuleRequest.setMultiSourceRuleTemplateId(20L);
        List<AlarmConfigRequest> alarmConfigRequests = new ArrayList<>();
        alarmConfigRequests.add(new AlarmConfigRequest(645L, CheckTemplateEnum.FIXED_VALUE.getCode(), CompareTypeEnum.EQUAL.getCode(), 0.0));
        addMultiSourceRuleRequest.setAlarmVariable(alarmConfigRequests);
    } else {
        sourceConfigRequest.setTableName(filterRequest.getSourceTable());
        if (StringUtils.isNotBlank(filterRequest.getSourceFilter())) {
            sourceConfigRequest.setFilter("! (" + filterRequest.getSourceFilter() + ")");
        } else {
            sourceConfigRequest.setFilter("true");
        }
        targetConfigRequest.setTableName(filterRequest.getTargetTable());
        if (StringUtils.isNotBlank(filterRequest.getTargetFilter())) {
            targetConfigRequest.setFilter("! (" + filterRequest.getTargetFilter() + ")");
        } else {
            targetConfigRequest.setFilter("true");
        }
        addMultiSourceRuleRequest.setMultiSourceRuleTemplateId(17L);
        List<AlarmConfigRequest> alarmConfigRequests = new ArrayList<>();
        alarmConfigRequests.add(new AlarmConfigRequest(33L, CheckTemplateEnum.FIXED_VALUE.getCode(), CompareTypeEnum.EQUAL.getCode(), 0.0));
        addMultiSourceRuleRequest.setAlarmVariable(alarmConfigRequests);
    }
    addMultiSourceRuleRequest.setSource(sourceConfigRequest);
    addMultiSourceRuleRequest.setTarget(targetConfigRequest);
    // All fields mappings
    LOGGER.info("Start to get all fields with source database's table and target database's table.");
    List<ColumnInfoDetail> sourceFields;
    List<ColumnInfoDetail> targetFields;
    if (request.getSourceLinkisDataSourceId() == null) {
        GetUserColumnByTableIdRequest getUserColumnSourceRequest = new GetUserColumnByTableIdRequest(0, Integer.MAX_VALUE, request.getClusterName(), request.getSourceDb(), filterRequest == null ? currentSourceTable : filterRequest.getSourceTable());
        getUserColumnSourceRequest.setProxyUser(request.getProxyUser());
        getUserColumnSourceRequest.setLoginUser(loginUser);
        sourceFields = getUserColumnByTableId(getUserColumnSourceRequest).getData().getData();
    } else {
        sourceFields = getColumnsByDataSource(request.getClusterName(), request.getProxyUser(), request.getSourceLinkisDataSourceId(), request.getSourceDb(), currentSourceTable).getData().getData();
    }
    if (request.getTargetLinkisDataSourceId() == null) {
        GetUserColumnByTableIdRequest getUserColumnTargetRequest = new GetUserColumnByTableIdRequest(0, Integer.MAX_VALUE, request.getClusterName(), request.getTargetDb(), filterRequest == null ? currentTargetTable : filterRequest.getTargetTable());
        getUserColumnTargetRequest.setProxyUser(request.getProxyUser());
        getUserColumnTargetRequest.setLoginUser(loginUser);
        targetFields = getUserColumnByTableId(getUserColumnTargetRequest).getData().getData();
    } else {
        targetFields = getColumnsByDataSource(request.getClusterName(), request.getProxyUser(), request.getTargetLinkisDataSourceId(), request.getTargetDb(), currentTargetTable).getData().getData();
    }
    if (CollectionUtils.isEmpty(sourceFields) || CollectionUtils.isEmpty(targetFields)) {
        throw new UnExpectedRequestException("There is table which has none field");
    }
    LOGGER.info("Success to get all fields with source database's table and target database's table.");
    // Sorted columns.
    Collections.sort(sourceFields, new Comparator<ColumnInfoDetail>() {

        @Override
        public int compare(ColumnInfoDetail front, ColumnInfoDetail back) {
            return front.getFieldName().compareTo(back.getFieldName());
        }
    });
    Collections.sort(targetFields, new Comparator<ColumnInfoDetail>() {

        @Override
        public int compare(ColumnInfoDetail front, ColumnInfoDetail back) {
            return front.getFieldName().compareTo(back.getFieldName());
        }
    });
    String sourceFieldStr = sourceFields.stream().map(ColumnInfoDetail::getFieldName).collect(Collectors.joining(SpecCharEnum.COMMA.getValue()));
    String sourceFieldTypeStr = sourceFields.stream().map(ColumnInfoDetail::getDataType).collect(Collectors.joining(SpecCharEnum.COMMA.getValue()));
    String targetFieldStr = targetFields.stream().map(ColumnInfoDetail::getFieldName).collect(Collectors.joining(SpecCharEnum.COMMA.getValue()));
    String targetFieldTypeStr = targetFields.stream().map(ColumnInfoDetail::getDataType).collect(Collectors.joining(SpecCharEnum.COMMA.getValue()));
    if (sourceFields.size() == 0 || targetFields.size() == 0 || sourceFields.size() != targetFields.size() || !sourceFieldStr.equals(targetFieldStr) || !sourceFieldTypeStr.equals(targetFieldTypeStr)) {
        throw new UnExpectedRequestException("Create multi-db rules failed, because the fields' name of table is different.");
    }
    List<MultiDataSourceJoinConfigRequest> mappings = new ArrayList<>(sourceFields.size());
    for (int j = 0; j < sourceFields.size() && j < targetFields.size(); j++) {
        ColumnInfoDetail currentSourceField = sourceFields.get(j);
        ColumnInfoDetail currentTargetField = targetFields.get(j);
        if (filterRequest != null && CollectionUtils.isNotEmpty(filterRequest.getFilterColumnList()) && filterRequest.getFilterColumnList().contains(currentSourceField.getFieldName())) {
            continue;
        }
        if (currentSourceField.getFieldName().equals(currentTargetField.getFieldName()) && currentSourceField.getDataType().equals(currentTargetField.getDataType())) {
            // TODO: continue
            MultiDataSourceJoinConfigRequest multiDataSourceJoinConfigRequest = new MultiDataSourceJoinConfigRequest();
            MultiDataSourceJoinColumnRequest leftJoinColumnRequest = new MultiDataSourceJoinColumnRequest("tmp1.".concat(currentSourceField.getFieldName()), currentSourceField.getDataType());
            MultiDataSourceJoinColumnRequest rightJoinColumnRequest = new MultiDataSourceJoinColumnRequest("tmp2.".concat(currentTargetField.getFieldName()), currentTargetField.getDataType());
            multiDataSourceJoinConfigRequest.setOperation(MappingOperationEnum.EQUAL.getCode());
            multiDataSourceJoinConfigRequest.setLeft(Arrays.asList(leftJoinColumnRequest));
            multiDataSourceJoinConfigRequest.setRight(Arrays.asList(rightJoinColumnRequest));
            multiDataSourceJoinConfigRequest.setLeftStatement("tmp1.".concat(currentSourceField.getFieldName()));
            multiDataSourceJoinConfigRequest.setRightStatement("tmp2.".concat(currentTargetField.getFieldName()));
            mappings.add(multiDataSourceJoinConfigRequest);
        } else {
            throw new UnExpectedRequestException("Create multi-db rules failed, because the fields' name of tables is different");
        }
    }
    addMultiSourceRuleRequest.setMappings(mappings);
    addMultiSourceRuleRequest.setLoginUser(loginUser);
    LOGGER.info("Success to construct add multi source rule request. Request[{}]", new ObjectMapper().writeValueAsString(addMultiSourceRuleRequest));
    return addMultiSourceRuleRequest;
}
Also used : UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) MultiDataSourceJoinColumnRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest) ArrayList(java.util.ArrayList) ColumnInfoDetail(com.webank.wedatasphere.qualitis.metadata.response.column.ColumnInfoDetail) MultiDataSourceJoinConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest) AlarmConfigRequest(com.webank.wedatasphere.qualitis.rule.request.AlarmConfigRequest) MultiDataSourceConfigRequest(com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceConfigRequest) GetUserColumnByTableIdRequest(com.webank.wedatasphere.qualitis.request.GetUserColumnByTableIdRequest) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) AddMultiSourceRuleRequest(com.webank.wedatasphere.qualitis.rule.request.multi.AddMultiSourceRuleRequest)

Aggregations

MultiDataSourceJoinColumnRequest (com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinColumnRequest)9 MultiDataSourceJoinConfigRequest (com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceJoinConfigRequest)6 ArrayList (java.util.ArrayList)5 UnExpectedRequestException (com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException)3 TemplateMidTableInputMeta (com.webank.wedatasphere.qualitis.rule.entity.TemplateMidTableInputMeta)2 AlarmConfigRequest (com.webank.wedatasphere.qualitis.rule.request.AlarmConfigRequest)2 AddMultiSourceRuleRequest (com.webank.wedatasphere.qualitis.rule.request.multi.AddMultiSourceRuleRequest)2 MultiDataSourceConfigRequest (com.webank.wedatasphere.qualitis.rule.request.multi.MultiDataSourceConfigRequest)2 Iterator (java.util.Iterator)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 LocalConfig (com.webank.wedatasphere.qualitis.LocalConfig)1 SpecCharEnum (com.webank.wedatasphere.qualitis.constant.SpecCharEnum)1 RuleMetricDao (com.webank.wedatasphere.qualitis.dao.RuleMetricDao)1 RuleMetricDepartmentUserDao (com.webank.wedatasphere.qualitis.dao.RuleMetricDepartmentUserDao)1 UserDao (com.webank.wedatasphere.qualitis.dao.UserDao)1 UserRoleDao (com.webank.wedatasphere.qualitis.dao.UserRoleDao)1 RuleMetric (com.webank.wedatasphere.qualitis.entity.RuleMetric)1 User (com.webank.wedatasphere.qualitis.entity.User)1 PermissionDeniedRequestException (com.webank.wedatasphere.qualitis.exception.PermissionDeniedRequestException)1 MetaDataAcquireFailedException (com.webank.wedatasphere.qualitis.metadata.exception.MetaDataAcquireFailedException)1