use of com.dtstack.taier.develop.sql.ParseResult in project Taier by DTStack.
the class LibraUglySqlHandler method parserUglySql.
public ParseResult parserUglySql() {
ParseResult parseResult = new ParseResult();
String parsedSql = parseUglySql();
parseResult.setStandardSql(parsedSql);
// 针对comment_on特殊处理
if ((sqlMode & COMMENT_ON_TABLE) == COMMENT_ON_TABLE) {
parseResult.setSqlType(SqlType.COMMENT_ON);
Matcher matcher = COMMENT_ON_TABLE_PATTERN.matcher(sql);
if (matcher.find()) {
String db = matcher.group("db");
if (StringUtils.isNotEmpty(db)) {
parseResult.setCurrentDb(db);
}
String table = matcher.group("table");
if (StringUtils.isNotEmpty(table)) {
Table table1 = new Table();
table1.setName(table);
parseResult.setMainTable(table1);
}
}
} else if ((sqlMode & COMMENT_ON_COLUMN) == COMMENT_ON_COLUMN) {
parseResult.setSqlType(SqlType.COMMENT_ON);
Matcher matcher = COMMENT_ON_COLUMN_PATTERN.matcher(sql);
if (matcher.find()) {
String columnStr = matcher.group("column");
String[] split = columnStr.split("\\.");
if (split.length == 3) {
parseResult.setCurrentDb(split[0]);
Table table = new Table();
table.setName(split[1]);
parseResult.setMainTable(table);
} else if (split.length == 2) {
Table table = new Table();
table.setName(split[0]);
parseResult.setMainTable(table);
}
}
}
return parseResult;
}
use of com.dtstack.taier.develop.sql.ParseResult in project Taier by DTStack.
the class AstNodeParser method parseSql.
/**
* 解析sql
*/
@Override
public ParseResult parseSql(String originSql, String currentDb, Map<String, List<Column>> tableColumnsMap) throws Exception {
ParseResult parseResult = new ParseResult();
parseResult.setCurrentDb(currentDb);
parseResult.setOriginSql(originSql);
parseResult.setMainTable(new Table());
ASTNode root;
originSql = SqlFormatUtil.formatSql(originSql);
// 解析和去掉sql中的生命周期和类目信息
parseLifecycleAndCatalogue(parseResult);
SqlFormatUtil.checkSql(parseResult.getStandardSql());
if (isNotParse(originSql, parseResult)) {
return parseResult;
}
if (SqlRegexUtil.isCreateTemp(parseResult.getStandardSql())) {
parseResult.setStandardSql(SqlRegexUtil.removeTempKey(parseResult.getStandardSql()));
parseResult.setExtraSqlType(SqlType.CREATE_TEMP);
}
String formattedSql = this.uglySqlHandler.parseUglySql(originSql);
if (StringUtils.isEmpty(formattedSql)) {
return parseResult;
}
try {
root = parseDriver.parse(formattedSql);
} catch (ParseException e) {
LOG.error("sql解析异常========>>>>:{}", e.getMessage());
// 用正则匹配一下
ParseResult p = SqlTypeRegexUtil.getParseResultByRegexSql(parseResult);
return p;
}
return getParseResult(originSql, currentDb, tableColumnsMap, parseResult, root);
}
use of com.dtstack.taier.develop.sql.ParseResult in project Taier by DTStack.
the class AstNodeParser method parseTableLineage.
@Override
public ParseResult parseTableLineage(String originSql, String currentDb) throws Exception {
ParseResult parseResult = new ParseResult();
parseResult.setCurrentDb(currentDb);
parseResult.setOriginSql(originSql);
parseResult.setMainTable(new Table());
ASTNode root;
originSql = SqlFormatUtil.formatSql(originSql);
String standardSql = SqlFormatUtil.getStandardSql(originSql);
SqlFormatUtil.checkSql(standardSql);
parseResult.setStandardSql(standardSql);
// 解析和去掉sql中的生命周期和类目信息
parseLifecycleAndCatalogue(parseResult);
String formattedSql = this.uglySqlHandler.parseUglySql(originSql);
if (StringUtils.isEmpty(formattedSql)) {
return parseResult;
}
parseResult.setStandardSql(formattedSql);
try {
root = parseDriver.parse(parseResult.getStandardSql());
} catch (ParseException e) {
LOG.error("sql解析异常========>>>>:{}", e.getMessage());
// 用正则匹配一下
ParseResult p = SqlTypeRegexUtil.getParseResultByRegexSql(parseResult);
return p;
}
NodeParser nodeParser = ASTNodeLineageParser.ParserProxy.getParser((ASTNode) root.getChild(0), originSql);
com.dtstack.taier.develop.sql.node.Node node = nodeParser.parseSql((ASTNode) root.getChild(0), currentDb, new HashMap<>(), new HashMap<>());
LineageParser lineageParser = LineageParser.HiveParserProxy.getParser(node, currentDb, new HashMap<>());
if (lineageParser != null) {
List<TableLineage> tableLineages = getTableLineages(node, lineageParser);
parseResult.setTableLineages(tableLineages);
}
getMainTable(node, parseResult, root);
return parseResult;
}
use of com.dtstack.taier.develop.sql.ParseResult in project Taier by DTStack.
the class ImpalaUglySqlHandler method parserUglySql.
public ParseResult parserUglySql() {
ParseResult parseResult = new ParseResult();
String parsedSql = this.parseUglySql(this.sql);
parseResult.setStandardSql(parsedSql);
// 针对comment_on特殊处理
if ((sqlMode & COMMENT_ON_TABLE) == COMMENT_ON_TABLE) {
parseResult.setSqlType(SqlType.COMMENT_ON);
Matcher matcher = COMMENT_ON_TABLE_PATTERN.matcher(sql);
if (matcher.find()) {
String db = matcher.group("db");
if (StringUtils.isNotEmpty(db)) {
parseResult.setCurrentDb(db);
}
String table = matcher.group("table");
if (StringUtils.isNotEmpty(table)) {
Table table1 = new Table();
table1.setName(table);
parseResult.setMainTable(table1);
}
}
} else if ((sqlMode & COMMENT_ON_COLUMN) == COMMENT_ON_COLUMN) {
parseResult.setSqlType(SqlType.COMMENT_ON);
Matcher matcher = COMMENT_ON_COLUMN_PATTERN.matcher(sql);
if (matcher.find()) {
String columnStr = matcher.group("column");
String[] split = columnStr.split("\\.");
if (split.length == 3) {
parseResult.setCurrentDb(split[0]);
Table table = new Table();
table.setName(split[1]);
parseResult.setMainTable(table);
} else if (split.length == 2) {
Table table = new Table();
table.setName(split[0]);
parseResult.setMainTable(table);
}
}
}
return parseResult;
}
use of com.dtstack.taier.develop.sql.ParseResult in project Taier by DTStack.
the class BatchSparkHiveSqlExeService method executeSql.
/**
* 执行sql
*
* @param executeContent
* @param scheduleJobType
* @return
*/
protected ExecuteResultVO executeSql(ExecuteContent executeContent, EScheduleJobType scheduleJobType) {
// 判断血缘解析结果,防止空指针
if (null == executeContent.getParseResult()) {
throw new RdosDefineException("SQL解析异常,结果为空");
}
Long tenantId = executeContent.getTenantId();
Long userId = executeContent.getUserId();
Long taskId = executeContent.getTaskId();
String preJobId = executeContent.getPreJobId();
String currDb = executeContent.getParseResult().getCurrentDb();
ParseResult parseResult = executeContent.getParseResult();
boolean useSelfFunction = batchFunctionService.validContainSelfFunction(executeContent.getSql(), tenantId, null, scheduleJobType.getType());
ExecuteResultVO<List<Object>> result = new ExecuteResultVO<>();
if (Objects.nonNull(parseResult) && Objects.nonNull(parseResult.getStandardSql()) && isSimpleQuery(parseResult.getStandardSql()) && !useSelfFunction) {
result = simpleQuery(tenantId, parseResult, currDb, userId, scheduleJobType);
if (!result.getContinue()) {
return result;
}
}
DataSourceType dataSourceType = scheduleJobType == EScheduleJobType.SPARK_SQL ? DataSourceType.SPARKTHRIFT2_1 : null;
if (SqlType.CREATE_AS.equals(parseResult.getSqlType())) {
String jobId = batchHadoopSelectSqlService.runSqlByTask(tenantId, parseResult, userId, currDb.toLowerCase(), true, taskId, scheduleJobType.getType(), preJobId);
result.setJobId(jobId);
result.setContinue(false);
return result;
} else if (SqlType.INSERT.equals(parseResult.getSqlType()) || SqlType.INSERT_OVERWRITE.equals(parseResult.getSqlType()) || SqlType.QUERY.equals(parseResult.getSqlType()) || useSelfFunction) {
String jobId = batchHadoopSelectSqlService.runSqlByTask(tenantId, parseResult, userId, currDb.toLowerCase(), taskId, scheduleJobType.getType(), preJobId);
result.setJobId(jobId);
} else {
if (!executeContent.isExecuteSqlLater()) {
TenantComponent tenantEngine = developTenantComponentService.getByTenantAndEngineType(executeContent.getTenantId(), executeContent.getTaskType());
Preconditions.checkNotNull(tenantEngine, "引擎不能为空");
if (SqlType.CREATE.equals(parseResult.getSqlType()) || SqlType.CREATE_LIKE.equals(parseResult.getSqlType())) {
executeCreateTableSql(parseResult, tenantId, tenantEngine.getComponentIdentity().toLowerCase(), scheduleJobType);
} else {
this.exeSqlDirect(executeContent, tenantId, parseResult, result, tenantEngine, dataSourceType);
}
}
}
result.setContinue(true);
return result;
}
Aggregations