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;
}
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);
}
}
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;
}
Aggregations