mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-13 13:07:32 +00:00
(improvement)(Headless) corrector supports subselect sql (#1006)
* [improvement] corrector support subselect sql --------- Co-authored-by: zuopengge
This commit is contained in:
@@ -206,6 +206,12 @@ public class SqlReplaceHelper {
|
|||||||
replaceAsName(fieldNameMap, selectItem);
|
replaceAsName(fieldNameMap, selectItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
|
||||||
|
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
|
||||||
|
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
|
||||||
|
replaceFieldsInPlainOneSelect(fieldNameMap, exactReplace, subPlainSelect);
|
||||||
|
}
|
||||||
|
|
||||||
//3. replace oder by fields
|
//3. replace oder by fields
|
||||||
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
|
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
|
||||||
if (!CollectionUtils.isEmpty(orderByElements)) {
|
if (!CollectionUtils.isEmpty(orderByElements)) {
|
||||||
|
|||||||
@@ -122,19 +122,28 @@ public class SqlSelectHelper {
|
|||||||
List<PlainSelect> plainSelectList = new ArrayList<>();
|
List<PlainSelect> plainSelectList = new ArrayList<>();
|
||||||
if (selectStatement instanceof PlainSelect) {
|
if (selectStatement instanceof PlainSelect) {
|
||||||
PlainSelect plainSelect = (PlainSelect) selectStatement;
|
PlainSelect plainSelect = (PlainSelect) selectStatement;
|
||||||
plainSelectList.add(plainSelect);
|
getSubPlainSelect(plainSelect, plainSelectList);
|
||||||
} else if (selectStatement instanceof SetOperationList) {
|
} else if (selectStatement instanceof SetOperationList) {
|
||||||
SetOperationList setOperationList = (SetOperationList) selectStatement;
|
SetOperationList setOperationList = (SetOperationList) selectStatement;
|
||||||
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {
|
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {
|
||||||
setOperationList.getSelects().forEach(subSelectBody -> {
|
setOperationList.getSelects().forEach(subSelectBody -> {
|
||||||
PlainSelect subPlainSelect = (PlainSelect) subSelectBody;
|
PlainSelect subPlainSelect = (PlainSelect) subSelectBody;
|
||||||
plainSelectList.add(subPlainSelect);
|
getSubPlainSelect(subPlainSelect, plainSelectList);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return plainSelectList;
|
return plainSelectList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void getSubPlainSelect(PlainSelect plainSelect, List<PlainSelect> plainSelectList) {
|
||||||
|
plainSelectList.add(plainSelect);
|
||||||
|
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
|
||||||
|
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
|
||||||
|
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
|
||||||
|
getSubPlainSelect(subPlainSelect, plainSelectList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Select getSelect(String sql) {
|
public static Select getSelect(String sql) {
|
||||||
Statement statement = null;
|
Statement statement = null;
|
||||||
try {
|
try {
|
||||||
@@ -275,6 +284,14 @@ public class SqlSelectHelper {
|
|||||||
if (Objects.nonNull(where)) {
|
if (Objects.nonNull(where)) {
|
||||||
where.accept(new FieldAndValueAcquireVisitor(result));
|
where.accept(new FieldAndValueAcquireVisitor(result));
|
||||||
}
|
}
|
||||||
|
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
|
||||||
|
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
|
||||||
|
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
|
||||||
|
Expression subWhere = subPlainSelect.getWhere();
|
||||||
|
if (Objects.nonNull(subWhere)) {
|
||||||
|
subWhere.accept(new FieldAndValueAcquireVisitor(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<>(result);
|
return new ArrayList<>(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ def build_dataSet(domain_id,model_id1,model_id2,model_id3,model_id4):
|
|||||||
{"id":model_id3,"includesAll":False,"metrics":metric_list3,"dimensions":dimension_list3},
|
{"id":model_id3,"includesAll":False,"metrics":metric_list3,"dimensions":dimension_list3},
|
||||||
{"id":model_id4,"includesAll":False,"metrics":metric_list4,"dimensions":dimension_list4}
|
{"id":model_id4,"includesAll":False,"metrics":metric_list4,"dimensions":dimension_list4}
|
||||||
]},
|
]},
|
||||||
"queryConfig":{"tagTypeDefaultConfig":{},"metricTypeDefaultConfig":{"timeDefaultConfig":{"unit":1,"period":"DAY","timeMode":"RECENT"}}},"admins":["admin"],"admin":"admin"}
|
"queryConfig":{"tagTypeDefaultConfig":{},"metricTypeDefaultConfig":{"timeDefaultConfig":{"unit":0,"period":"DAY","timeMode":"RECENT"}}},"admins":["admin"],"admin":"admin"}
|
||||||
url=get_url_pre()+"/api/semantic/dataSet"
|
url=get_url_pre()+"/api/semantic/dataSet"
|
||||||
authorization=get_authorization()
|
authorization=get_authorization()
|
||||||
header = {}
|
header = {}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ def get_pred_result():
|
|||||||
pred_sql_list=[]
|
pred_sql_list=[]
|
||||||
default_sql="select * from tablea "
|
default_sql="select * from tablea "
|
||||||
time_cost=[]
|
time_cost=[]
|
||||||
|
time.sleep(60)
|
||||||
for i in range(0,len(questions)):
|
for i in range(0,len(questions)):
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql)
|
pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql)
|
||||||
@@ -73,7 +74,7 @@ def get_pred_result():
|
|||||||
cost='%.3f'%(end_time-start_time)
|
cost='%.3f'%(end_time-start_time)
|
||||||
time_cost.append(cost)
|
time_cost.append(cost)
|
||||||
pred_sql_list.append(pred_sql)
|
pred_sql_list.append(pred_sql)
|
||||||
time.sleep(60)
|
time.sleep(3)
|
||||||
write_sql(pred_sql_path, pred_sql_list)
|
write_sql(pred_sql_path, pred_sql_list)
|
||||||
|
|
||||||
return [float(cost) for cost in time_cost]
|
return [float(cost) for cost in time_cost]
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ public class S2SqlDateHelper {
|
|||||||
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
|
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
|
||||||
String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum);
|
String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum);
|
||||||
String endDate = DateUtils.getBeforeDate(1, datePeriodEnum);
|
String endDate = DateUtils.getBeforeDate(1, datePeriodEnum);
|
||||||
|
if (unit == 0) {
|
||||||
|
endDate = startDate;
|
||||||
|
}
|
||||||
if (TimeMode.LAST.equals(timeMode)) {
|
if (TimeMode.LAST.equals(timeMode)) {
|
||||||
endDate = startDate;
|
endDate = startDate;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user