Package org.apache.druid.segment
Class UnnestDimensionCursor
java.lang.Object
org.apache.druid.segment.UnnestDimensionCursor
- All Implemented Interfaces:
Cursor
The cursor to help unnest MVDs with dictionary encoding.
Consider a segment has 2 rows
['a', 'b', 'c']
['d', 'c']
Considering dictionary encoding, these are represented as
'a' -> 0 'b' -> 1 'c' -> 2 'd' -> 3
The baseCursor points to the row of IndexedInts [0, 1, 2] while the unnestCursor with each call of advance() moves over individual elements.
advance() -> 0 -> 'a' advance() -> 1 -> 'b' advance() -> 2 -> 'c' advance() -> 3 -> 'd' (advances base cursor first) advance() -> 2 -> 'c'
Total 5 advance calls above
The index reference points to the index of each row that the unnest cursor is accessing The indexedInts for each row are held in the indexedIntsForCurrentRow object
The needInitialization flag sets up the initial values of indexedIntsForCurrentRow at the beginning of the segment
-
Constructor Summary
ConstructorsConstructorDescriptionUnnestDimensionCursor(Cursor cursor, ColumnSelectorFactory baseColumnSelectorFactory, VirtualColumn unnestColumn) -
Method Summary
Modifier and TypeMethodDescriptionvoidadvance()Advance the cursor to the next position, checking if thread has been interrupted after advancing and possibly throwingQueryInterruptedExceptionif so.voidAdvance to the cursor to the next position.Get aColumnSelectorFactorywhose selectors will be backed by the row values at the current position of the cursorbooleanisDone()Check if the current cursor position is valid, returning false if there are values to read from selectors created byCursor.getColumnSelectorFactory().booleanCheck if the current cursor position is valid, or if the thread has been interrupted.voidreset()Reset to start of cursor.
-
Constructor Details
-
UnnestDimensionCursor
public UnnestDimensionCursor(Cursor cursor, ColumnSelectorFactory baseColumnSelectorFactory, VirtualColumn unnestColumn)
-
-
Method Details
-
getColumnSelectorFactory
Description copied from interface:CursorGet aColumnSelectorFactorywhose selectors will be backed by the row values at the current position of the cursor- Specified by:
getColumnSelectorFactoryin interfaceCursor
-
advance
public void advance()Description copied from interface:CursorAdvance the cursor to the next position, checking if thread has been interrupted after advancing and possibly throwingQueryInterruptedExceptionif so. Callers should checkCursor.isDone()orCursor.isDoneOrInterrupted()before getting the next value from a selector. -
advanceUninterruptibly
public void advanceUninterruptibly()Description copied from interface:CursorAdvance to the cursor to the next position. Callers should checkCursor.isDone()orCursor.isDoneOrInterrupted()before getting the next value from a selector. However, underlying implementation may still check for thread interruption if advancing the cursor is a long-running operation.- Specified by:
advanceUninterruptiblyin interfaceCursor
-
isDone
public boolean isDone()Description copied from interface:CursorCheck if the current cursor position is valid, returning false if there are values to read from selectors created byCursor.getColumnSelectorFactory(). If true, any such selectors will no longer produce values. -
isDoneOrInterrupted
public boolean isDoneOrInterrupted()Description copied from interface:CursorCheck if the current cursor position is valid, or if the thread has been interrupted.- Specified by:
isDoneOrInterruptedin interfaceCursor- See Also:
-
reset
public void reset()Description copied from interface:CursorReset to start of cursor. Most cursor implementations are backed by immutable data, but there is generically no guarantee that advancing through a cursor again will read exactly the same data or even number of rows, since the underlying data might be mutable in some cases.
-