[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:
@ -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();
|
||||
|
||||
@ -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());
|
||||
|
||||
Reference in New Issue
Block a user