diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/FollowerColumnSender.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/FollowerColumnSender.java index 22df039325d868..86539a39b67f39 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/FollowerColumnSender.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/FollowerColumnSender.java @@ -17,6 +17,7 @@ package org.apache.doris.statistics; +import org.apache.doris.catalog.Column; import org.apache.doris.catalog.Env; import org.apache.doris.catalog.TableIf; import org.apache.doris.common.ClientPool; @@ -130,7 +131,8 @@ protected Set getNeedAnalyzeColumns(Queue columnQueue LOG.warn("Failed to find table for column {}", column.colName); continue; } - if (StatisticsUtil.isUnsupportedType(table.getColumn(column.colName).getType())) { + Column col = table.getColumn(column.colName); + if (col == null || StatisticsUtil.isUnsupportedType(col.getType())) { continue; } Set> columnIndexPairs = table.getColumnIndexPairs( diff --git a/fe/fe-core/src/test/java/org/apache/doris/statistics/FollowerColumnSenderTest.java b/fe/fe-core/src/test/java/org/apache/doris/statistics/FollowerColumnSenderTest.java index 84a3c45c5bc81c..d45792ec9b4034 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/statistics/FollowerColumnSenderTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/statistics/FollowerColumnSenderTest.java @@ -72,4 +72,32 @@ public void testGetNeedAnalyzeColumns() { } } + @Test + public void testGetNeedAnalyzeColumnsSkipDroppedColumns() { + OlapTable mockTable = Mockito.mock(OlapTable.class); + Mockito.when(mockTable.getColumn("dropped")).thenReturn(null); + Mockito.when(mockTable.getColumn("visible")).thenReturn(new Column("visible", PrimitiveType.INT)); + Mockito.when(mockTable.getColumnIndexPairs(Mockito.any())) + .thenReturn(Collections.singleton(Pair.of("mockIndex", "visible"))); + + try (MockedStatic statisticsUtilStatic = Mockito.mockStatic(StatisticsUtil.class)) { + statisticsUtilStatic.when(() -> StatisticsUtil.needAnalyzeColumn(Mockito.any(), Mockito.any())) + .thenReturn(true); + statisticsUtilStatic.when(() -> StatisticsUtil.findTable(Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong())) + .thenReturn(mockTable); + + QueryColumn droppedColumn = new QueryColumn(1, 2, 3, "dropped"); + QueryColumn visibleQueryColumn = new QueryColumn(1, 2, 3, "visible"); + Queue queue = new BlockingArrayQueue<>(); + queue.add(droppedColumn); + queue.add(visibleQueryColumn); + + FollowerColumnSender sender = new FollowerColumnSender(); + Set needAnalyzeColumns = sender.getNeedAnalyzeColumns(queue); + Assertions.assertEquals(1, needAnalyzeColumns.size()); + Assertions.assertFalse(needAnalyzeColumns.contains(droppedColumn.toThrift())); + Assertions.assertTrue(needAnalyzeColumns.contains(visibleQueryColumn.toThrift())); + } + } + }