Search in sources :

Example 1 with ISqlExeService

use of com.dtstack.taier.develop.service.develop.ISqlExeService in project Taier by DTStack.

the class BatchSqlExeService method processSqlText.

/**
 * 处理自定义函数 和 构建真正运行的SQL
 *
 * @param tenantId
 * @param taskType
 * @param sqlText
 * @return
 */
public CheckSyntaxResult processSqlText(final Long tenantId, Integer taskType, final String sqlText) {
    CheckSyntaxResult result = new CheckSyntaxResult();
    TenantComponent tenantEngine = this.developTenantComponentService.getByTenantAndEngineType(tenantId, taskType);
    Preconditions.checkNotNull(tenantEngine, String.format("tenantEngine %d not support task type %d", tenantId, taskType));
    ISqlExeService sqlExeService = this.multiEngineServiceFactory.getSqlExeService(taskType);
    // 处理自定义函数
    String sqlPlus = buildCustomFunctionSparkSql(sqlText, tenantId, taskType);
    // 构建真正运行的SQL,去掉注释,加上use db 同时格式化SQL
    String sqls = sqlExeService.process(sqlPlus, tenantEngine.getComponentIdentity());
    result.setSql(sqls);
    result.setCheckResult(true);
    return result;
}
Also used : ISqlExeService(com.dtstack.taier.develop.service.develop.ISqlExeService) TenantComponent(com.dtstack.taier.dao.domain.TenantComponent) CheckSyntaxResult(com.dtstack.taier.develop.dto.devlop.CheckSyntaxResult)

Example 2 with ISqlExeService

use of com.dtstack.taier.develop.service.develop.ISqlExeService in project Taier by DTStack.

the class BatchSqlExeService method prepareExecuteContent.

/**
 * 进行SQL解析
 * @param executeContent
 */
private void prepareExecuteContent(final ExecuteContent executeContent) {
    BatchTask one = batchTaskService.getOneWithError(executeContent.getTaskId());
    String taskParam = one.getTaskParams();
    ISqlExeService sqlExeService = this.multiEngineServiceFactory.getSqlExeService(executeContent.getTaskType());
    String sql = executeContent.getSql();
    // TODO cache lazy table 暂时不解析血缘,不知道这种类型的sql如何处理
    if (StringUtils.isNotBlank(sql) && (sql.toLowerCase().trim().startsWith("set") || CACHE_LAZY_SQL_PATTEN.matcher(sql).matches())) {
        // set sql 不解析
        ParseResult parseResult = new ParseResult();
        parseResult.setParseSuccess(true);
        parseResult.setOriginSql(executeContent.getSql());
        parseResult.setStandardSql(executeContent.getSql());
        executeContent.setParseResult(parseResult);
        return;
    }
    // 单条sql解析
    if (StringUtils.isNotBlank(executeContent.getSql())) {
        ParseResult parseResult = this.parseSql(executeContent);
        executeContent.setParseResult(parseResult);
        // 校验语法
        if (executeContent.isCheckSyntax()) {
            sqlExeService.checkSingleSqlSyntax(executeContent.getTenantId(), executeContent.getSql(), executeContent.getDatabase(), taskParam);
        }
    }
    // 批量解析sql
    List<ParseResult> parseResultList = Lists.newLinkedList();
    if (CollectionUtils.isNotEmpty(executeContent.getSqlList())) {
        String finalTaskParam = taskParam;
        executeContent.getSqlList().forEach(x -> {
            if (!x.trim().startsWith("set")) {
                if (executeContent.isCheckSyntax()) {
                    executeContent.setSql(x);
                    ParseResult batchParseResult = this.parseSql(executeContent);
                    sqlExeService.checkSingleSqlSyntax(executeContent.getTenantId(), x, executeContent.getDatabase(), finalTaskParam);
                    parseResultList.add(batchParseResult);
                }
            } else {
                // set sql 不解析
                ParseResult batchParseResult = new ParseResult();
                batchParseResult.setParseSuccess(true);
                batchParseResult.setOriginSql(x);
                batchParseResult.setStandardSql(x);
                parseResultList.add(batchParseResult);
            }
        });
        executeContent.setParseResultList(parseResultList);
    }
}
Also used : ParseResult(com.dtstack.taier.develop.sql.ParseResult) BatchTask(com.dtstack.taier.dao.domain.BatchTask) ISqlExeService(com.dtstack.taier.develop.service.develop.ISqlExeService)

Example 3 with ISqlExeService

use of com.dtstack.taier.develop.service.develop.ISqlExeService in project Taier by DTStack.

the class BatchSqlExeService method executeSql.

/**
 * 执行SQL
 */
@Forbidden
public ExecuteResultVO executeSql(final ExecuteContent executeContent) throws Exception {
    final ExecuteResultVO result = new ExecuteResultVO();
    this.prepareExecuteContent(executeContent);
    // 前置操作
    result.setSqlText(executeContent.getSql());
    final ISqlExeService sqlExeService = this.multiEngineServiceFactory.getSqlExeService(executeContent.getTaskType());
    final ExecuteResultVO engineExecuteResult = sqlExeService.executeSql(executeContent);
    if (!engineExecuteResult.getContinue()) {
        return engineExecuteResult;
    }
    PublicUtil.copyPropertiesIgnoreNull(engineExecuteResult, result);
    return result;
}
Also used : ExecuteResultVO(com.dtstack.taier.develop.dto.devlop.ExecuteResultVO) ISqlExeService(com.dtstack.taier.develop.service.develop.ISqlExeService) Forbidden(com.dtstack.taier.common.annotation.Forbidden)

Aggregations

ISqlExeService (com.dtstack.taier.develop.service.develop.ISqlExeService)3 Forbidden (com.dtstack.taier.common.annotation.Forbidden)1 BatchTask (com.dtstack.taier.dao.domain.BatchTask)1 TenantComponent (com.dtstack.taier.dao.domain.TenantComponent)1 CheckSyntaxResult (com.dtstack.taier.develop.dto.devlop.CheckSyntaxResult)1 ExecuteResultVO (com.dtstack.taier.develop.dto.devlop.ExecuteResultVO)1 ParseResult (com.dtstack.taier.develop.sql.ParseResult)1