[Bug](materialized view) fix create materialized view fail

1. remove referenced_column(seems unused now).
2. fix mv slot ref id wrong.
3. add type check for hll_hash.
4. enable non-nullable column change to nullable column.
This commit is contained in:
Pxl
2022-08-12 09:49:16 +08:00
committed by GitHub
parent 0f555e90cb
commit f5fe622a1b
11 changed files with 41 additions and 68 deletions

View File

@ -23,6 +23,7 @@ import org.apache.doris.analysis.DescriptorTable;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.MVColumnItem;
import org.apache.doris.analysis.SlotDescriptor;
import org.apache.doris.analysis.SlotRef;
import org.apache.doris.analysis.SqlParser;
import org.apache.doris.analysis.SqlScanner;
import org.apache.doris.analysis.TupleDescriptor;
@ -78,6 +79,7 @@ import org.apache.logging.log4j.Logger;
import java.io.DataOutput;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@ -369,20 +371,28 @@ public class RollupJobV2 extends AlterJobV2 implements GsonPostProcessable {
long baseTabletId = tabletIdMap.get(rollupTabletId);
Map<String, Expr> defineExprs = Maps.newHashMap();
for (Column column : rollupSchema) {
if (column.getDefineExpr() != null) {
defineExprs.put(column.getName(), column.getDefineExpr());
}
}
List<Column> fullSchema = tbl.getBaseSchema(true);
DescriptorTable descTable = new DescriptorTable();
TupleDescriptor destTupleDesc = descTable.createTupleDescriptor();
for (Column column : fullSchema) {
Map<String, SlotDescriptor> descMap = Maps.newHashMap();
for (Column column : tbl.getFullSchema()) {
SlotDescriptor destSlotDesc = descTable.addSlotDescriptor(destTupleDesc);
destSlotDesc.setIsMaterialized(true);
destSlotDesc.setColumn(column);
destSlotDesc.setIsNullable(column.isAllowNull());
descMap.put(column.getName(), destSlotDesc);
}
for (Column column : tbl.getFullSchema()) {
if (column.getDefineExpr() != null) {
defineExprs.put(column.getName(), column.getDefineExpr());
List<SlotRef> slots = new ArrayList<>();
column.getDefineExpr().collect(SlotRef.class, slots);
Preconditions.checkArgument(slots.size() == 1);
slots.get(0).setDesc(descMap.get(slots.get(0).getColumnName()));
}
}
List<Replica> rollupReplicas = rollupTablet.getReplicas();

View File

@ -34,6 +34,8 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
@ -54,6 +56,8 @@ import java.util.Set;
* [PROPERTIES ("key" = "value")]
*/
public class CreateMaterializedViewStmt extends DdlStmt {
private static final Logger LOG = LogManager.getLogger(CreateMaterializedViewStmt.class);
public static final String MATERIALIZED_VIEW_NAME_PREFIX = "mv_";
public static final Map<String, MVColumnPattern> FN_NAME_TO_PATTERN;
@ -400,9 +404,6 @@ public class CreateMaterializedViewStmt extends DdlStmt {
mvColumnName = baseColumnName;
} else {
mvColumnName = mvColumnBuilder(functionName, baseColumnName);
if (!functionChild0.getType().isStringType()) {
functionChild0.uncheckedCastChild(Type.VARCHAR, 0);
}
defineExpr = functionChild0;
}
mvAggregateType = AggregateType.valueOf(functionName.toUpperCase());