This is an automated email from the ASF dual-hosted git repository.

kfaraz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 26b568d8b83 Return null segment ID for Segment objects that are not 
backed by a table (#17960)
26b568d8b83 is described below

commit 26b568d8b83d75821944c23e23037f8ac95096b4
Author: Cece Mei <[email protected]>
AuthorDate: Fri May 2 21:29:10 2025 -0700

    Return null segment ID for Segment objects that are not backed by a table 
(#17960)
    
    Changes
    ---------
    - Update `Segment.getId()` with `@Nullable` annotation.
    - Return null id for `RowBasedSegment` (used by external/lookup/inline 
segment)
    - Return null id for `FrameSegment`, `LookupSegment`
    - Update tests
    
    This patch is a follow-up to #17774
---
 .../frame/FrameChannelMergerBenchmark.java         |   6 +-
 .../druid/benchmark/query/SqlBaseBenchmark.java    |   6 +-
 .../druid/msq/input/ParseExceptionUtils.java       |  11 +-
 .../druid/msq/input/external/ExternalSegment.java  |   3 -
 .../groupby/GroupByPreShuffleFrameProcessor.java   |   3 +-
 .../results/ExportResultsFrameProcessor.java       |   3 +-
 .../msq/querykit/scan/ScanQueryFrameProcessor.java |   3 +-
 .../WindowOperatorQueryFrameProcessorTest.java     |   2 -
 .../common/SortMergeJoinFrameProcessorTest.java    |   2 -
 .../apache/druid/frame/segment/FrameSegment.java   |   9 +-
 .../apache/druid/query/lookup/LookupSegment.java   |  10 +-
 .../apache/druid/query/scan/ScanQueryEngine.java   |  10 +-
 .../org/apache/druid/segment/ArrayListSegment.java |   5 +-
 .../apache/druid/segment/NoopQueryableIndex.java   |  98 ++++++++++++++++++
 .../druid/segment/ReferenceCountingSegment.java    |   5 +-
 .../org/apache/druid/segment/RowBasedSegment.java  |   7 +-
 .../java/org/apache/druid/segment/Segment.java     |   4 +
 .../loading/TombstoneSegmentizerFactory.java       |  83 ++-------------
 .../frame/key/FrameComparisonWidgetImplTest.java   |   3 -
 .../apache/druid/frame/testutil/FrameTestUtil.java |  18 +---
 .../apache/druid/frame/write/FrameWriterTest.java  |   4 +-
 .../groupby/ComplexDimensionGroupByQueryTest.java  |   2 -
 .../druid/query/lookup/LookupSegmentTest.java      |   9 +-
 .../SegmentToRowsAndColumnsOperatorTest.java       |   1 -
 .../semantic/RowsAndColumnsDecoratorTest.java      |   2 -
 .../query/scan/ScanQueryResultOrderingTest.java    |  12 +--
 .../timeboundary/TimeBoundaryQueryRunnerTest.java  |   1 -
 .../org/apache/druid/segment/IndexBuilder.java     |   6 +-
 .../org/apache/druid/segment/TestSegmentUtils.java | 111 ++++++++-------------
 .../segment/FrameBasedInlineSegmentWrangler.java   |   4 +-
 .../druid/segment/InlineSegmentWrangler.java       |   5 +-
 .../druid/segment/realtime/sink/SinkTest.java      |   1 -
 .../druid/server/ClientQuerySegmentWalkerTest.java |   2 -
 .../server/TestClusterQuerySegmentWalker.java      |  21 +++-
 34 files changed, 219 insertions(+), 253 deletions(-)

diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
index 161de8a217d..8739f03ccea 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/frame/FrameChannelMergerBenchmark.java
@@ -50,7 +50,6 @@ import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.nested.StructuredData;
-import org.apache.druid.timeline.SegmentId;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
@@ -210,7 +209,7 @@ public class FrameChannelMergerBenchmark
    * Create {@link #numChannels} channels in {@link #channels}, with {@link 
#numRows} total rows split across the
    * channels according to {@link ChannelDistribution}. Each channel is 
individually sorted, as required
    * by {@link FrameChannelMerger}.
-   *
+   * <p>
    * Rows are fixed-length at {@link #rowLength} with fixed-length keys at 
{@link #keyLength}. Keys are generated
    * by {@link KeyGenerator}.
    */
@@ -268,7 +267,6 @@ public class FrameChannelMergerBenchmark
       final List<NonnullPair<Comparable, String>> rows = 
channelRows.get(channelNumber);
       final RowBasedSegment<NonnullPair<Comparable, String>> segment =
           new RowBasedSegment<>(
-              SegmentId.dummy("__dummy"),
               Sequences.simple(rows),
               columnName -> {
                 if (KEY.equals(columnName)) {
@@ -298,7 +296,7 @@ public class FrameChannelMergerBenchmark
    * Create {@link #numChannels} channels in {@link #channels}, with {@link 
#numRows} total rows split across the
    * channels according to {@link ChannelDistribution}. Each channel is 
individually sorted, as required
    * by {@link FrameChannelMerger}.
-   *
+   * <p>
    * Rows are fixed-length at {@link #rowLength} with fixed-length keys at 
{@link #keyLength}. Keys are generated
    * by {@link KeyGenerator}.
    */
diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
index 7ab942ff6f7..241a0086c1f 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBaseBenchmark.java
@@ -475,8 +475,7 @@ public class SqlBaseBenchmark
           descriptor,
           new FrameSegment(
               FrameTestUtil.cursorFactoryToFrame(cursorFactory, 
FrameType.ROW_BASED),
-              FrameReader.create(cursorFactory.getRowSignature()),
-              descriptor.getId()
+              FrameReader.create(cursorFactory.getRowSignature())
           )
           {
             @Nullable
@@ -497,8 +496,7 @@ public class SqlBaseBenchmark
           descriptor,
           new FrameSegment(
               FrameTestUtil.cursorFactoryToFrame(cursorFactory, 
FrameType.COLUMNAR),
-              FrameReader.create(cursorFactory.getRowSignature()),
-              descriptor.getId()
+              FrameReader.create(cursorFactory.getRowSignature())
           )
           {
             @Nullable
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
index 0911059b364..a8ea3d44b46 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/ParseExceptionUtils.java
@@ -21,9 +21,7 @@ package org.apache.druid.msq.input;
 
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.msq.input.external.ExternalSegment;
-import org.apache.druid.msq.input.inline.InlineInputSliceReader;
 import org.apache.druid.query.lookup.LookupSegment;
-import org.apache.druid.segment.QueryableIndexSegment;
 import org.apache.druid.segment.Segment;
 
 import javax.annotation.Nullable;
@@ -47,14 +45,11 @@ public class ParseExceptionUtils
           "external input source: %s",
           ((ExternalSegment) segment).externalInputSource().toString()
       );
-    } else if (segment instanceof LookupSegment) {
-      return StringUtils.format("lookup input source: %s", 
segment.getId().getDataSource());
-    } else if (segment instanceof QueryableIndexSegment) {
+    } else if (segment.getId() != null) {
       return StringUtils.format("table input source: %s", 
segment.getId().getDataSource());
-    } else if 
(InlineInputSliceReader.SEGMENT_ID.equals(segment.getId().getDataSource())) {
-      return "inline input source";
+    } else if (segment instanceof LookupSegment) {
+      return StringUtils.format("lookup input source: %s", segment.asString());
     }
-
     return null;
   }
 }
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
index 3aae435b8d9..a38ea92f039 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalSegment.java
@@ -31,7 +31,6 @@ import org.apache.druid.msq.counters.WarningCounters;
 import org.apache.druid.msq.indexing.error.CannotParseExternalDataFault;
 import org.apache.druid.segment.RowBasedSegment;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 
 import java.io.IOException;
 import java.util.NoSuchElementException;
@@ -45,7 +44,6 @@ public class ExternalSegment extends RowBasedSegment<InputRow>
 
   private final InputSource inputSource;
   private final RowSignature signature;
-  public static final String SEGMENT_ID = "__external";
 
   /**
    * @param inputSource       {@link InputSource} that the segment is a 
representation of
@@ -67,7 +65,6 @@ public class ExternalSegment extends RowBasedSegment<InputRow>
   )
   {
     super(
-        SegmentId.dummy(SEGMENT_ID),
         new BaseSequence<>(
             new BaseSequence.IteratorMaker<InputRow, 
CloseableIterator<InputRow>>()
             {
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
index ad456a45f5b..a02e6e6988d 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByPreShuffleFrameProcessor.java
@@ -58,7 +58,6 @@ import org.apache.druid.segment.CompleteSegment;
 import org.apache.druid.segment.SegmentReference;
 import org.apache.druid.segment.TimeBoundaryInspector;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -187,7 +186,7 @@ public class GroupByPreShuffleFrameProcessor extends 
BaseLeafFrameProcessor
 
       if (inputChannel.canRead()) {
         final Frame frame = inputChannel.read();
-        final FrameSegment frameSegment = new FrameSegment(frame, 
inputFrameReader, SegmentId.dummy("x"));
+        final FrameSegment frameSegment = new FrameSegment(frame, 
inputFrameReader);
         final SegmentReference mappedSegment = mapSegment(frameSegment);
 
         final Sequence<ResultRow> rowSequence =
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
index 2c4a92efef6..e57134bc3d3 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/results/ExportResultsFrameProcessor.java
@@ -46,7 +46,6 @@ import org.apache.druid.sql.calcite.planner.ColumnMappings;
 import org.apache.druid.sql.calcite.run.SqlResults;
 import org.apache.druid.sql.http.ResultFormat;
 import org.apache.druid.storage.StorageConnector;
-import org.apache.druid.timeline.SegmentId;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -151,7 +150,7 @@ public class ExportResultsFrameProcessor implements 
FrameProcessor<Object>
 
   private void exportFrame(final Frame frame)
   {
-    final Segment segment = new FrameSegment(frame, frameReader, 
SegmentId.dummy("test"));
+    final Segment segment = new FrameSegment(frame, frameReader);
     try (final CursorHolder cursorHolder = 
segment.asCursorFactory().makeCursorHolder(CursorBuildSpec.FULL_SCAN)) {
       final Cursor cursor = cursorHolder.asCursor();
       if (cursor == null) {
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
index 3f42e6c8e5f..ef453badab8 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryFrameProcessor.java
@@ -78,7 +78,6 @@ import org.apache.druid.segment.SimpleSettableOffset;
 import org.apache.druid.segment.VirtualColumn;
 import org.apache.druid.segment.VirtualColumns;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 import org.apache.druid.utils.CloseableUtils;
 
 import javax.annotation.Nullable;
@@ -313,7 +312,7 @@ public class ScanQueryFrameProcessor extends 
BaseLeafFrameProcessor
     if (cursor == null || cursor.isDone()) {
       if (inputChannel.canRead()) {
         final Frame frame = inputChannel.read();
-        final FrameSegment frameSegment = new FrameSegment(frame, 
inputFrameReader, SegmentId.dummy("scan"));
+        final FrameSegment frameSegment = new FrameSegment(frame, 
inputFrameReader);
 
         final Segment mappedSegment = mapSegment(frameSegment);
         final CursorFactory cursorFactory = mappedSegment.asCursorFactory();
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
index e9484ec76e6..cabb8f25c1a 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/WindowOperatorQueryFrameProcessorTest.java
@@ -51,7 +51,6 @@ import org.apache.druid.segment.CursorFactory;
 import org.apache.druid.segment.RowBasedSegment;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
 import org.junit.Assert;
@@ -357,7 +356,6 @@ public class WindowOperatorQueryFrameProcessorTest extends 
FrameProcessorTestBas
   ) throws IOException
   {
     RowBasedSegment<Map<String, Object>> segment = new RowBasedSegment<>(
-        SegmentId.dummy("test"),
         Sequences.simple(rows),
         columnName -> m -> m.get(columnName),
         signature
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
index 7e941e047ed..dcbf52e0d73 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/querykit/common/SortMergeJoinFrameProcessorTest.java
@@ -50,7 +50,6 @@ import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.join.JoinTestHelper;
 import org.apache.druid.segment.join.JoinType;
-import org.apache.druid.timeline.SegmentId;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
@@ -1458,7 +1457,6 @@ public class SortMergeJoinFrameProcessorTest extends 
FrameProcessorTestBase
     try (final RowBasedSegment<Map<String, Object>> segment = 
JoinTestHelper.withRowsFromResource(
         resource,
         rows -> new RowBasedSegment<>(
-            SegmentId.dummy(resource),
             limit < 0 ? Sequences.simple(rows) : 
Sequences.simple(rows).limit(limit),
             columnName -> m -> m.get(columnName),
             signature
diff --git 
a/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java 
b/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
index 3df54bc184d..4e0c560c0e0 100644
--- a/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
+++ b/processing/src/main/java/org/apache/druid/frame/segment/FrameSegment.java
@@ -21,6 +21,7 @@ package org.apache.druid.frame.segment;
 
 import org.apache.druid.frame.Frame;
 import org.apache.druid.frame.read.FrameReader;
+import org.apache.druid.java.util.common.Intervals;
 import 
org.apache.druid.query.rowsandcols.concrete.ColumnBasedFrameRowsAndColumns;
 import org.apache.druid.segment.CloseableShapeshifter;
 import org.apache.druid.segment.CursorFactory;
@@ -41,25 +42,23 @@ public class FrameSegment implements Segment
 {
   private final Frame frame;
   private final FrameReader frameReader;
-  private final SegmentId segmentId;
 
-  public FrameSegment(Frame frame, FrameReader frameReader, SegmentId 
segmentId)
+  public FrameSegment(Frame frame, FrameReader frameReader)
   {
     this.frame = frame;
     this.frameReader = frameReader;
-    this.segmentId = segmentId;
   }
 
   @Override
   public SegmentId getId()
   {
-    return segmentId;
+    return null;
   }
 
   @Override
   public Interval getDataInterval()
   {
-    return segmentId.getInterval();
+    return Intervals.ETERNITY;
   }
 
   @Nullable
diff --git 
a/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java 
b/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
index 58c64c47239..af63dc6986d 100644
--- a/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
+++ b/processing/src/main/java/org/apache/druid/query/lookup/LookupSegment.java
@@ -26,7 +26,6 @@ import org.apache.druid.segment.RowBasedSegment;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.join.lookup.LookupColumnSelectorFactory;
-import org.apache.druid.timeline.SegmentId;
 
 import java.util.Map;
 import java.util.function.Function;
@@ -43,11 +42,11 @@ public class LookupSegment extends 
RowBasedSegment<Map.Entry<String, String>>
                   .add(LookupColumnSelectorFactory.KEY_COLUMN, 
ColumnType.STRING)
                   .add(LookupColumnSelectorFactory.VALUE_COLUMN, 
ColumnType.STRING)
                   .build();
+  private final String lookupName;
 
   public LookupSegment(final String lookupName, final LookupExtractorFactory 
lookupExtractorFactory)
   {
     super(
-        SegmentId.dummy(lookupName),
         Sequences.simple(() -> {
           final LookupExtractor extractor = lookupExtractorFactory.get();
 
@@ -80,5 +79,12 @@ public class LookupSegment extends 
RowBasedSegment<Map.Entry<String, String>>
         },
         ROW_SIGNATURE
     );
+    this.lookupName = lookupName;
+  }
+
+  @Override
+  public String asString()
+  {
+    return getClass().getSimpleName() + ":" + lookupName;
   }
 }
diff --git 
a/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java 
b/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
index 7d314e972c6..301014282ab 100644
--- a/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
+++ b/processing/src/main/java/org/apache/druid/query/scan/ScanQueryEngine.java
@@ -48,7 +48,6 @@ import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.filter.Filters;
-import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 
 import javax.annotation.Nullable;
@@ -113,8 +112,6 @@ public class ScanQueryEngine
     final List<Interval> intervals = 
query.getQuerySegmentSpec().getIntervals();
     Preconditions.checkArgument(intervals.size() == 1, "Can only handle a 
single interval, got[%s]", intervals);
 
-    final SegmentId segmentId = segment.getId();
-
     // If the row count is not set, set it to 0, else do nothing.
     responseContext.addRowScanCount(0);
     final long limit = calculateRemainingScanRowsLimit(query, responseContext);
@@ -186,7 +183,12 @@ public class ScanQueryEngine
                   throw new UOE("resultFormat[%s] is not supported", 
resultFormat.toString());
                 }
                 responseContext.addRowScanCount(offset - lastOffset);
-                return new ScanResultValue(segmentId.toString(), allColumns, 
events, rowSignatureBuilder.build());
+                return new ScanResultValue(
+                    segment.getId() == null ? segment.asString() : 
segment.getId().toString(),
+                    allColumns,
+                    events,
+                    rowSignatureBuilder.build()
+                );
               }
 
               @Override
diff --git 
a/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java 
b/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
index 19491403522..eefccb0d0ff 100644
--- a/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/ArrayListSegment.java
@@ -23,7 +23,6 @@ import org.apache.druid.java.util.common.guava.Sequences;
 import org.apache.druid.query.rowsandcols.ArrayListRowsAndColumns;
 import org.apache.druid.query.rowsandcols.RowsAndColumns;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 
 import javax.annotation.Nullable;
 import java.util.ArrayList;
@@ -49,20 +48,18 @@ public class ArrayListSegment<RowType> extends 
RowBasedSegment<RowType>
    * cursor factory will allow creation of selectors on any field, using the 
{@link RowAdapter#columnFunction} for that
    * field, even if it doesn't appear in "rowSignature".
    *
-   * @param segmentId    segment identifier; will be returned by {@link 
#getId()}
    * @param rows         objects that comprise this segment. Must be 
re-iterable if support for {@link Cursor#reset()}
    *                     is required. Otherwise, does not need to be 
re-iterable.
    * @param rowAdapter   adapter used for reading these objects
    * @param rowSignature signature of the columns in these objects
    */
   public ArrayListSegment(
-      final SegmentId segmentId,
       final ArrayList<RowType> rows,
       final RowAdapter<RowType> rowAdapter,
       final RowSignature rowSignature
   )
   {
-    super(segmentId, Sequences.simple(rows), rowAdapter, rowSignature);
+    super(Sequences.simple(rows), rowAdapter, rowSignature);
     this.rows = rows;
     this.adapter = rowAdapter;
     this.rowSignature = rowSignature;
diff --git 
a/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java 
b/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java
new file mode 100644
index 00000000000..116f7f9e1ce
--- /dev/null
+++ b/processing/src/main/java/org/apache/druid/segment/NoopQueryableIndex.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.segment;
+
+import org.apache.druid.collections.bitmap.BitmapFactory;
+import org.apache.druid.query.OrderBy;
+import org.apache.druid.segment.column.ColumnHolder;
+import org.apache.druid.segment.data.Indexed;
+import org.joda.time.Interval;
+
+import javax.annotation.Nullable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A no-op implementation of QueryableIndex. Throws 
UnsupportedOperationException for all methods, except {@link #close()}.
+ */
+public class NoopQueryableIndex implements QueryableIndex
+{
+  @Override
+  public Interval getDataInterval()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public int getNumRows()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public Indexed<String> getAvailableDimensions()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public BitmapFactory getBitmapFactoryForDimensions()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Nullable
+  @Override
+  public Metadata getMetadata()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public Map<String, DimensionHandler> getDimensionHandlers()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public List<OrderBy> getOrdering()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void close()
+  {
+
+  }
+
+  @Override
+  public List<String> getColumnNames()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Nullable
+  @Override
+  public ColumnHolder getColumnHolder(String columnName)
+  {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git 
a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
 
b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
index 8957ec723d7..1836efd8ae0 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/ReferenceCountingSegment.java
@@ -48,10 +48,11 @@ public class ReferenceCountingSegment extends 
ReferenceCountingCloseableObject<S
 
   public static ReferenceCountingSegment wrapRootGenerationSegment(Segment 
baseSegment)
   {
+    int partitionNum = baseSegment.getId() == null ? 0 : 
baseSegment.getId().getPartitionNum();
     return new ReferenceCountingSegment(
         Preconditions.checkNotNull(baseSegment, "baseSegment"),
-        baseSegment.getId().getPartitionNum(),
-        (baseSegment.getId().getPartitionNum() + 1),
+        partitionNum,
+        partitionNum + 1,
         (short) 0,
         (short) 1
     );
diff --git 
a/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java 
b/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
index 4ba2c98987d..57d9676f571 100644
--- a/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
+++ b/processing/src/main/java/org/apache/druid/segment/RowBasedSegment.java
@@ -34,7 +34,6 @@ import javax.annotation.Nullable;
  */
 public class RowBasedSegment<RowType> implements Segment
 {
-  private final SegmentId segmentId;
   private final Sequence<RowType> rowSequence;
   private final RowAdapter<RowType> rowAdapter;
   private final RowSignature rowSignature;
@@ -51,30 +50,26 @@ public class RowBasedSegment<RowType> implements Segment
    * cursor factory will allow creation of selectors on any field, using the 
{@link RowAdapter#columnFunction} for that
    * field, even if it doesn't appear in "rowSignature".
    *
-   * @param segmentId    segment identifier; will be returned by {@link 
#getId()}
    * @param rowSequence  objects that comprise this segment. Must be 
re-iterable if support for {@link Cursor#reset()}
    *                     is required. Otherwise, does not need to be 
re-iterable.
    * @param rowAdapter   adapter used for reading these objects
    * @param rowSignature signature of the columns in these objects
    */
   public RowBasedSegment(
-      final SegmentId segmentId,
       final Sequence<RowType> rowSequence,
       final RowAdapter<RowType> rowAdapter,
       final RowSignature rowSignature
   )
   {
-    this.segmentId = Preconditions.checkNotNull(segmentId, "segmentId");
     this.rowSignature = Preconditions.checkNotNull(rowSignature, 
"rowSignature");
     this.rowSequence = Preconditions.checkNotNull(rowSequence, "rowSequence");
     this.rowAdapter = Preconditions.checkNotNull(rowAdapter, "rowAdapter");
   }
 
   @Override
-  @Nonnull
   public SegmentId getId()
   {
-    return segmentId;
+    return null;
   }
 
   @Override
diff --git a/processing/src/main/java/org/apache/druid/segment/Segment.java 
b/processing/src/main/java/org/apache/druid/segment/Segment.java
index 1da4b47f89c..0c779d09228 100644
--- a/processing/src/main/java/org/apache/druid/segment/Segment.java
+++ b/processing/src/main/java/org/apache/druid/segment/Segment.java
@@ -38,6 +38,10 @@ import java.io.Closeable;
 @PublicApi
 public interface Segment extends Closeable
 {
+  /**
+   * Returns the {@link SegmentId} of this segment, if it is backed by a real 
table, otherwise returns null.
+   */
+  @Nullable
   SegmentId getId();
 
   Interval getDataInterval();
diff --git 
a/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
 
b/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
index f07c039ea4e..fef7a69f238 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/loading/TombstoneSegmentizerFactory.java
@@ -21,29 +21,22 @@ package org.apache.druid.segment.loading;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-import org.apache.druid.collections.bitmap.BitmapFactory;
-import org.apache.druid.query.OrderBy;
 import org.apache.druid.segment.Cursor;
 import org.apache.druid.segment.CursorBuildSpec;
 import org.apache.druid.segment.CursorFactory;
 import org.apache.druid.segment.CursorHolder;
-import org.apache.druid.segment.DimensionHandler;
-import org.apache.druid.segment.Metadata;
+import org.apache.druid.segment.NoopQueryableIndex;
 import org.apache.druid.segment.QueryableIndex;
 import org.apache.druid.segment.Segment;
 import org.apache.druid.segment.SegmentLazyLoadFailCallback;
 import org.apache.druid.segment.column.ColumnCapabilities;
-import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.segment.data.Indexed;
 import org.apache.druid.timeline.DataSegment;
 import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 
 import javax.annotation.Nullable;
 import java.io.File;
-import java.util.List;
-import java.util.Map;
 
 public class TombstoneSegmentizerFactory implements SegmentizerFactory
 {
@@ -66,72 +59,14 @@ public class TombstoneSegmentizerFactory implements 
SegmentizerFactory
     // Create a no-op queryable index that indicates that it was created from 
a tombstone...then the
     // server manager will use the information to short-circuit and create a 
no-op query runner for
     // it since it has no data:
-    final QueryableIndex queryableIndex =
-        new QueryableIndex()
-        {
-          @Override
-          public Interval getDataInterval()
-          {
-            return tombstone.getInterval();
-          }
-
-          @Override
-          public int getNumRows()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Override
-          public Indexed<String> getAvailableDimensions()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Override
-          public BitmapFactory getBitmapFactoryForDimensions()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Nullable
-          @Override
-          public Metadata getMetadata()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Override
-          public Map<String, DimensionHandler> getDimensionHandlers()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Override
-          public List<OrderBy> getOrdering()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Override
-          public void close()
-          {
-
-          }
-
-          @Override
-          public List<String> getColumnNames()
-          {
-            throw new UnsupportedOperationException();
-          }
-
-          @Nullable
-          @Override
-          public ColumnHolder getColumnHolder(String columnName)
-          {
-            throw new UnsupportedOperationException();
-          }
-
-        };
+    final QueryableIndex queryableIndex = new NoopQueryableIndex()
+    {
+      @Override
+      public Interval getDataInterval()
+      {
+        return tombstone.getInterval();
+      }
+    };
 
     final Segment segmentObject = new Segment()
     {
diff --git 
a/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
 
b/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
index 9e0547cae43..a3aa832fa2b 100644
--- 
a/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
+++ 
b/processing/src/test/java/org/apache/druid/frame/key/FrameComparisonWidgetImplTest.java
@@ -30,7 +30,6 @@ import org.apache.druid.segment.CursorFactory;
 import org.apache.druid.segment.RowBasedSegment;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.testing.InitializedNullHandlingTest;
-import org.apache.druid.timeline.SegmentId;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
 import org.junit.Assert;
@@ -51,7 +50,6 @@ public class FrameComparisonWidgetImplTest extends 
InitializedNullHandlingTest
   public void setUp()
   {
     final CursorFactory rowBasedAdapterWithoutComplexColumn = new 
RowBasedSegment<>(
-        SegmentId.dummy("test"),
         
Sequences.simple(ByteRowKeyComparatorTest.KEY_OBJECTS_WITHOUT_COMPLEX_COLUMN),
         columnName -> {
           final int idx = 
ByteRowKeyComparatorTest.NO_COMPLEX_SIGNATURE.getColumnNames().indexOf(columnName);
@@ -72,7 +70,6 @@ public class FrameComparisonWidgetImplTest extends 
InitializedNullHandlingTest
     );
 
     final CursorFactory rowBasedAdapterWithComplexColumn = new 
RowBasedSegment<>(
-        SegmentId.dummy("test"),
         Sequences.simple(ByteRowKeyComparatorTest.ALL_KEY_OBJECTS),
         columnName -> {
           final int idx = 
ByteRowKeyComparatorTest.SIGNATURE.getColumnNames().indexOf(columnName);
diff --git 
a/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java 
b/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
index 2bb8789740c..50b4e80dba0 100644
--- 
a/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
+++ 
b/processing/src/test/java/org/apache/druid/frame/testutil/FrameTestUtil.java
@@ -31,7 +31,6 @@ import org.apache.druid.frame.file.FrameFileWriter;
 import org.apache.druid.frame.read.FrameReader;
 import org.apache.druid.frame.segment.FrameSegment;
 import org.apache.druid.frame.util.SettableLongVirtualColumn;
-import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.java.util.common.guava.Sequence;
 import org.apache.druid.java.util.common.guava.Sequences;
 import org.apache.druid.query.OrderBy;
@@ -51,7 +50,6 @@ import org.apache.druid.segment.column.ValueType;
 import org.apache.druid.segment.data.IndexedInts;
 import org.apache.druid.segment.vector.VectorColumnSelectorFactory;
 import org.apache.druid.segment.vector.VectorCursor;
-import org.apache.druid.timeline.SegmentId;
 import org.junit.Assert;
 
 import javax.annotation.Nullable;
@@ -198,21 +196,7 @@ public class FrameTestUtil
   {
     return new FrameSegment(
         cursorFactoryToFrame(adapter, frameType),
-        FrameReader.create(adapter.getRowSignature()),
-        SegmentId.of("TestFrame", Intervals.ETERNITY, "0", 0)
-    );
-  }
-
-  public static FrameSegment cursorFactoryToFrameSegment(
-      final CursorFactory cursorFactory,
-      final FrameType frameType,
-      final SegmentId segmentId
-  )
-  {
-    return new FrameSegment(
-        cursorFactoryToFrame(cursorFactory, frameType),
-        FrameReader.create(cursorFactory.getRowSignature()),
-        segmentId
+        FrameReader.create(adapter.getRowSignature())
     );
   }
 
diff --git 
a/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java 
b/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
index c5790d3a504..f2c9db01257 100644
--- a/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
+++ b/processing/src/test/java/org/apache/druid/frame/write/FrameWriterTest.java
@@ -57,7 +57,6 @@ import org.apache.druid.segment.column.ColumnCapabilitiesImpl;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.serde.ComplexMetrics;
 import org.apache.druid.testing.InitializedNullHandlingTest;
-import org.apache.druid.timeline.SegmentId;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
 import org.junit.Assert;
@@ -499,7 +498,6 @@ public class FrameWriterTest extends 
InitializedNullHandlingTest
     if (inputFrameType == null) {
       // inputFrameType null means input is not a frame
       inputSegment = new RowBasedSegment<>(
-          SegmentId.dummy("dummy"),
           rows,
           columnName -> {
             final int columnNumber = signature.indexOf(columnName);
@@ -518,7 +516,7 @@ public class FrameWriterTest extends 
InitializedNullHandlingTest
           Collections.emptyList()
       ).lhs;
 
-      inputSegment = new FrameSegment(inputFrame, 
FrameReader.create(signature), SegmentId.dummy("xxx"));
+      inputSegment = new FrameSegment(inputFrame, 
FrameReader.create(signature));
     }
 
     try (final CursorHolder cursorHolder = 
inputSegment.asCursorFactory().makeCursorHolder(CursorBuildSpec.FULL_SCAN)) {
diff --git 
a/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
 
b/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
index bc1ecbb0ddc..0a17fa45933 100644
--- 
a/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/groupby/ComplexDimensionGroupByQueryTest.java
@@ -35,7 +35,6 @@ import org.apache.druid.segment.RowBasedSegment;
 import org.apache.druid.segment.Segment;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.timeline.SegmentId;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -91,7 +90,6 @@ public class ComplexDimensionGroupByQueryTest
 
     this.segments = Collections.singletonList(
         new RowBasedSegment<>(
-            SegmentId.dummy("dummy"),
             rows,
             columnName -> {
               final int columnNumber = rowSignature.indexOf(columnName);
diff --git 
a/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java 
b/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
index 8b93bc06011..4f8d4e79fc7 100644
--- 
a/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/lookup/LookupSegmentTest.java
@@ -34,7 +34,6 @@ import org.apache.druid.segment.column.ColumnCapabilities;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.column.ValueType;
-import org.apache.druid.timeline.SegmentId;
 import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
 import org.junit.Assert;
@@ -106,7 +105,13 @@ public class LookupSegmentTest
   @Test
   public void test_getId()
   {
-    Assert.assertEquals(SegmentId.dummy(LOOKUP_NAME), LOOKUP_SEGMENT.getId());
+    Assert.assertNull(LOOKUP_SEGMENT.getId());
+  }
+
+  @Test
+  public void test_asString()
+  {
+    Assert.assertEquals("LookupSegment:mylookup", LOOKUP_SEGMENT.asString());
   }
 
   @Test
diff --git 
a/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
 
b/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
index 36a93fadab4..e56444ced9a 100644
--- 
a/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/operator/SegmentToRowsAndColumnsOperatorTest.java
@@ -53,7 +53,6 @@ public class SegmentToRowsAndColumnsOperatorTest
     );
 
     ArrayListSegment<Object[]> segment = new ArrayListSegment<>(
-        SegmentId.dummy("test"),
         rows,
         columnName -> objects -> objects[Integer.parseInt(columnName)],
         RowSignature.builder()
diff --git 
a/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
 
b/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
index 41295f48017..65929faa61f 100644
--- 
a/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/rowsandcols/semantic/RowsAndColumnsDecoratorTest.java
@@ -47,7 +47,6 @@ import org.apache.druid.segment.column.TypeStrategy;
 import org.apache.druid.segment.filter.AndFilter;
 import org.apache.druid.segment.filter.OrFilter;
 import org.apache.druid.segment.filter.SelectorFilter;
-import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 import org.junit.Assert;
 import org.junit.Test;
@@ -278,7 +277,6 @@ public class RowsAndColumnsDecoratorTest extends 
SemanticTestBase
       decor.addFilter(filter);
 
       final ArrayListSegment<Object[]> seggy = new ArrayListSegment<>(
-          SegmentId.dummy("dummy"),
           new ArrayList<>(Arrays.asList(originalVals)),
           columnName -> {
             int index = siggy.indexOf(columnName);
diff --git 
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
 
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
index 9c507cdcc8d..7ff0d26773e 100644
--- 
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
@@ -39,7 +39,7 @@ import org.apache.druid.query.context.ResponseContext;
 import org.apache.druid.query.spec.MultipleIntervalSegmentSpec;
 import org.apache.druid.query.spec.MultipleSpecificSegmentSpec;
 import org.apache.druid.segment.RowAdapter;
-import org.apache.druid.segment.RowBasedSegment;
+import org.apache.druid.segment.TestSegmentUtils.InMemoryTestSegment;
 import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
@@ -63,7 +63,7 @@ import java.util.stream.IntStream;
 
 /**
  * Tests the order in which Scan query results come back.
- *
+ * <p>
  * Ensures that we have run-to-run stability of result order, which is 
important for offset-based pagination.
  */
 @RunWith(Parameterized.class)
@@ -87,8 +87,8 @@ public class ScanQueryResultOrderingTest extends 
InitializedNullHandlingTest
                                                                 
.add(ID_COLUMN, ColumnType.LONG)
                                                                 .build();
 
-  private static final List<RowBasedSegment<Object[]>> SEGMENTS = 
ImmutableList.of(
-      new RowBasedSegment<>(
+  private static final List<InMemoryTestSegment<Object[]>> SEGMENTS = 
ImmutableList.of(
+      new InMemoryTestSegment<>(
           SegmentId.of(DATASOURCE, Intervals.of("2000-01-01/P1D"), "1", 0),
           Sequences.simple(
               ImmutableList.of(
@@ -105,7 +105,7 @@ public class ScanQueryResultOrderingTest extends 
InitializedNullHandlingTest
           ROW_ADAPTER,
           ROW_SIGNATURE
       ),
-      new RowBasedSegment<>(
+      new InMemoryTestSegment<>(
           SegmentId.of(DATASOURCE, Intervals.of("2000-01-01/P1D"), "1", 1),
           Sequences.simple(
               ImmutableList.of(
@@ -122,7 +122,7 @@ public class ScanQueryResultOrderingTest extends 
InitializedNullHandlingTest
           ROW_ADAPTER,
           ROW_SIGNATURE
       ),
-      new RowBasedSegment<>(
+      new InMemoryTestSegment<>(
           SegmentId.of(DATASOURCE, Intervals.of("2000-01-02/P1D"), "1", 0),
           Sequences.simple(
               ImmutableList.of(
diff --git 
a/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
 
b/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
index f4659260cb1..92128647ac4 100644
--- 
a/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/timeboundary/TimeBoundaryQueryRunnerTest.java
@@ -274,7 +274,6 @@ public class TimeBoundaryQueryRunnerTest extends 
InitializedNullHandlingTest
     final QueryRunner<Result<TimeBoundaryResultValue>> theRunner =
         new 
TimeBoundaryQueryRunnerFactory(QueryRunnerTestHelper.NOOP_QUERYWATCHER).createRunner(
             new RowBasedSegment<>(
-                SegmentId.dummy("dummy"),
                 Sequences.simple(inlineDataSource.getRows()),
                 inlineDataSource.rowAdapter(),
                 inlineDataSource.getRowSignature()
diff --git 
a/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java 
b/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
index f081ed46fa5..4d8da3c6389 100644
--- a/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
+++ b/processing/src/test/java/org/apache/druid/segment/IndexBuilder.java
@@ -45,7 +45,6 @@ import 
org.apache.druid.segment.incremental.OnheapIncrementalIndex;
 import org.apache.druid.segment.transform.TransformSpec;
 import 
org.apache.druid.segment.writeout.OffHeapMemorySegmentWriteOutMediumFactory;
 import org.apache.druid.segment.writeout.SegmentWriteOutMediumFactory;
-import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 
 import javax.annotation.Nonnull;
@@ -406,7 +405,6 @@ public class IndexBuilder
   public RowBasedSegment<InputRow> buildRowBasedSegmentWithoutTypeSignature()
   {
     return new RowBasedSegment<>(
-        SegmentId.dummy("IndexBuilder"),
         Sequences.simple(rows),
         RowAdapters.standardRow(),
         RowSignature.empty()
@@ -420,7 +418,6 @@ public class IndexBuilder
       final RowSignature signature = new 
QueryableIndexCursorFactory(index).getRowSignature();
 
       return new RowBasedSegment<>(
-          SegmentId.dummy("IndexBuilder"),
           Sequences.simple(rows),
           RowAdapters.standardRow(),
           signature
@@ -434,8 +431,7 @@ public class IndexBuilder
     try (final QueryableIndex index = buildMMappedIndex()) {
       return FrameTestUtil.cursorFactoryToFrameSegment(
           new QueryableIndexCursorFactory(index),
-          frameType,
-          SegmentId.dummy("IndexBuilder")
+          frameType
       );
     }
   }
diff --git 
a/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java 
b/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
index 2d20be1f7f5..690eeab94a7 100644
--- a/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
+++ b/processing/src/test/java/org/apache/druid/segment/TestSegmentUtils.java
@@ -24,12 +24,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.io.Files;
-import org.apache.druid.collections.bitmap.BitmapFactory;
 import org.apache.druid.java.util.common.FileUtils;
 import org.apache.druid.java.util.common.Intervals;
+import org.apache.druid.java.util.common.guava.Sequence;
 import org.apache.druid.query.OrderBy;
-import org.apache.druid.segment.column.ColumnHolder;
-import org.apache.druid.segment.data.Indexed;
+import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.loading.LoadSpec;
 import org.apache.druid.segment.loading.SegmentLoadingException;
 import org.apache.druid.segment.loading.SegmentizerFactory;
@@ -41,13 +40,11 @@ import org.joda.time.Interval;
 import org.junit.Assert;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ThreadLocalRandom;
 
 /**
@@ -121,77 +118,22 @@ public class TestSegmentUtils
     }
   }
 
-  public static class SegmentForTesting extends QueryableIndexSegment 
implements Segment
+  private static final QueryableIndex INDEX = new NoopQueryableIndex()
+  {
+    @Override
+    public List<OrderBy> getOrdering()
+    {
+      return Cursors.ascendingTimeOrder();
+    }
+  };
+
+  public static class SegmentForTesting extends QueryableIndexSegment
   {
     private final String datasource;
     private final String version;
     private final Interval interval;
     private final Object lock = new Object();
     private volatile boolean closed = false;
-    private static final QueryableIndex INDEX = new QueryableIndex()
-    {
-      @Override
-      public Interval getDataInterval()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override
-      public int getNumRows()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override
-      public Indexed<String> getAvailableDimensions()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override
-      public BitmapFactory getBitmapFactoryForDimensions()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Nullable
-      @Override
-      public Metadata getMetadata()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override
-      public Map<String, DimensionHandler> getDimensionHandlers()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override
-      public List<OrderBy> getOrdering()
-      {
-        return Cursors.ascendingTimeOrder();
-      }
-
-      @Override
-      public void close()
-      {
-
-      }
-
-      @Override
-      public List<String> getColumnNames()
-      {
-        throw new UnsupportedOperationException();
-      }
-
-      @Nullable
-      @Override
-      public ColumnHolder getColumnHolder(String columnName)
-      {
-        throw new UnsupportedOperationException();
-      }
-    };
 
     public SegmentForTesting(String datasource, Interval interval, String 
version)
     {
@@ -260,6 +202,35 @@ public class TestSegmentUtils
     }
   }
 
+  /**
+   * A test segment that is backed by a {@link RowBasedSegment}. This is used 
to test the {@link QueryableIndexSegment}.
+   */
+  public static class InMemoryTestSegment<RowType> extends 
QueryableIndexSegment
+  {
+    private final RowBasedSegment<RowType> segment;
+
+    public InMemoryTestSegment(
+        final SegmentId segmentId,
+        final Sequence<RowType> rowSequence,
+        final RowAdapter<RowType> rowAdapter,
+        final RowSignature rowSignature
+    )
+    {
+      super(INDEX, segmentId);
+      this.segment = new RowBasedSegment<>(
+          rowSequence,
+          rowAdapter,
+          rowSignature
+      );
+    }
+
+    @Override
+    public CursorFactory asCursorFactory()
+    {
+      return segment.asCursorFactory();
+    }
+  }
+
   public static DataSegment makeTombstoneSegment(String dataSource, String 
version, Interval interval)
   {
     return new DataSegment(
diff --git 
a/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
 
b/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
index 407bbf750fa..d535d299616 100644
--- 
a/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
+++ 
b/server/src/main/java/org/apache/druid/segment/FrameBasedInlineSegmentWrangler.java
@@ -23,7 +23,6 @@ import org.apache.druid.frame.read.FrameReader;
 import org.apache.druid.frame.segment.FrameSegment;
 import org.apache.druid.query.DataSource;
 import org.apache.druid.query.FrameBasedInlineDataSource;
-import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 
 public class FrameBasedInlineSegmentWrangler implements SegmentWrangler
@@ -45,8 +44,7 @@ public class FrameBasedInlineSegmentWrangler implements 
SegmentWrangler
         .<Segment>map(
             frameSignaturePair -> new FrameSegment(
                 frameSignaturePair.getFrame(),
-                FrameReader.create(frameSignaturePair.getRowSignature()),
-                SegmentId.dummy(SEGMENT_ID)
+                FrameReader.create(frameSignaturePair.getRowSignature())
             )
         )
         .iterator();
diff --git 
a/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java 
b/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
index 6128dcf49f2..459f817c0d9 100644
--- a/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
+++ b/server/src/main/java/org/apache/druid/segment/InlineSegmentWrangler.java
@@ -22,7 +22,6 @@ package org.apache.druid.segment;
 import org.apache.druid.java.util.common.guava.Sequences;
 import org.apache.druid.query.DataSource;
 import org.apache.druid.query.InlineDataSource;
-import org.apache.druid.timeline.SegmentId;
 import org.joda.time.Interval;
 
 import java.util.ArrayList;
@@ -30,7 +29,7 @@ import java.util.Collections;
 
 /**
  * A {@link SegmentWrangler} for {@link InlineDataSource}.
- *
+ * <p>
  * It is not valid to pass any other DataSource type to the 
"getSegmentsForIntervals" method.
  */
 public class InlineSegmentWrangler implements SegmentWrangler
@@ -46,7 +45,6 @@ public class InlineSegmentWrangler implements SegmentWrangler
     if (inlineDataSource.rowsAreArrayList()) {
       return Collections.singletonList(
           new ArrayListSegment<>(
-              SegmentId.dummy(SEGMENT_ID),
               (ArrayList<Object[]>) inlineDataSource.getRowsAsList(),
               inlineDataSource.rowAdapter(),
               inlineDataSource.getRowSignature()
@@ -56,7 +54,6 @@ public class InlineSegmentWrangler implements SegmentWrangler
 
     return Collections.singletonList(
         new RowBasedSegment<>(
-            SegmentId.dummy(SEGMENT_ID),
             Sequences.simple(inlineDataSource.getRows()),
             inlineDataSource.rowAdapter(),
             inlineDataSource.getRowSignature()
diff --git 
a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java 
b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
index 7ec6490be82..a464fbc5be9 100644
--- a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
+++ b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
@@ -360,7 +360,6 @@ public class SinkTest extends InitializedNullHandlingTest
         new FireHydrant(EasyMock.createMock(IncrementalIndex.class), 0, 
segmentId),
         new FireHydrant(
             new RowBasedSegment<>(
-                segmentId,
                 Sequences.empty(),
                 RowAdapters.standardRow(),
                 RowSignature.empty()
diff --git 
a/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
 
b/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
index b6abac80167..a812acc4597 100644
--- 
a/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
+++ 
b/server/src/test/java/org/apache/druid/server/ClientQuerySegmentWalkerTest.java
@@ -91,7 +91,6 @@ import 
org.apache.druid.segment.virtual.ExpressionVirtualColumn;
 import org.apache.druid.server.initialization.ServerConfig;
 import org.apache.druid.server.scheduling.ManualQueryPrioritizationStrategy;
 import org.apache.druid.server.scheduling.NoQueryLaningStrategy;
-import org.apache.druid.timeline.SegmentId;
 import org.apache.druid.timeline.VersionedIntervalTimeline;
 import org.apache.druid.timeline.partition.NumberedShardSpec;
 import org.apache.druid.timeline.partition.ShardSpec;
@@ -1856,7 +1855,6 @@ public class ClientQuerySegmentWalkerTest
         SHARD_SPEC.createChunk(
             ReferenceCountingSegment.wrapSegment(
                 new RowBasedSegment<>(
-                    SegmentId.of(name, INTERVAL, VERSION, 
SHARD_SPEC.getPartitionNum()),
                     Sequences.simple(dataSource.getRows()),
                     dataSource.rowAdapter(),
                     dataSource.getRowSignature()
diff --git 
a/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
 
b/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
index 71480d7c2be..730dff7ee8b 100644
--- 
a/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
+++ 
b/server/src/test/java/org/apache/druid/server/TestClusterQuerySegmentWalker.java
@@ -264,7 +264,7 @@ public class TestClusterQuerySegmentWalker implements 
QuerySegmentWalker
 
       for (TimelineObjectHolder<String, ReferenceCountingSegment> holder : 
timeline.lookup(interval)) {
         for (PartitionChunk<ReferenceCountingSegment> chunk : 
holder.getObject()) {
-          retVal.add(new WindowedSegment(chunk.getObject(), 
holder.getInterval()));
+          retVal.add(new WindowedSegment(chunk.getObject(), 
holder.getInterval(), holder.getVersion(), chunk.getChunkNumber()));
         }
       }
 
@@ -287,7 +287,7 @@ public class TestClusterQuerySegmentWalker implements 
QuerySegmentWalker
             spec.getVersion(),
             spec.getPartitionNumber()
         );
-        retVal.add(new WindowedSegment(entry.getObject(), spec.getInterval()));
+        retVal.add(new WindowedSegment(entry.getObject(), spec.getInterval(), 
spec.getVersion(), spec.getPartitionNumber()));
       }
 
       return retVal;
@@ -298,12 +298,23 @@ public class TestClusterQuerySegmentWalker implements 
QuerySegmentWalker
   {
     private final ReferenceCountingSegment segment;
     private final Interval interval;
+    private final String version;
+    private final int partitionNumber;
 
-    public WindowedSegment(ReferenceCountingSegment segment, Interval interval)
+    public WindowedSegment(ReferenceCountingSegment segment, Interval 
interval, String version, int partitionNumber)
     {
+      if (segment.getId() != null) {
+        
Preconditions.checkArgument(segment.getId().getInterval().contains(interval));
+      } else {
+        Preconditions.checkArgument(
+            segment.getDataInterval().contains(interval),
+            "Data interval for non-table segment should default to external"
+        );
+      }
       this.segment = segment;
       this.interval = interval;
-      
Preconditions.checkArgument(segment.getId().getInterval().contains(interval));
+      this.version = version;
+      this.partitionNumber = partitionNumber;
     }
 
     public ReferenceCountingSegment getSegment()
@@ -318,7 +329,7 @@ public class TestClusterQuerySegmentWalker implements 
QuerySegmentWalker
 
     public SegmentDescriptor getDescriptor()
     {
-      return new SegmentDescriptor(interval, segment.getId().getVersion(), 
segment.getId().getPartitionNum());
+      return new SegmentDescriptor(interval, version, partitionNumber);
     }
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to