Class Granularities
java.lang.Object
org.apache.druid.java.util.common.granularity.Granularities
This class was created b/c sometimes static initializers of a class that use a subclass can deadlock.
See: #2979, #3979
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Stringstatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularitystatic final Granularity -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic CursorBuildSpecdecorateCursorBuildSpec(Query<?> query, CursorBuildSpec buildSpec) DecoratesCursorBuildSpecwith a grouping column and virtual column equivalent to theGranularityfor aQuery, if that query has granularity other thanALL.static GranularityfromVirtualColumn(VirtualColumn virtualColumn) Converts a virtual column with a single input time column into aGranularityif it is aTimestampFloorExprMacro.TimestampFloorExpr.static GranularitynullToAll(Granularity granularity) static ExpressionVirtualColumntoVirtualColumn(Granularity granularity, String virtualColumnName) Translates aGranularityto aExpressionVirtualColumnonColumnHolder.TIME_COLUMN_NAMEof the equivalent grouping column.
-
Field Details
-
SECOND
-
MINUTE
-
FIVE_MINUTE
-
TEN_MINUTE
-
FIFTEEN_MINUTE
-
THIRTY_MINUTE
-
HOUR
-
SIX_HOUR
-
EIGHT_HOUR
-
DAY
-
WEEK
-
MONTH
-
QUARTER
-
YEAR
-
ALL
-
NONE
-
GRANULARITY_VIRTUAL_COLUMN_NAME
- See Also:
-
-
Constructor Details
-
Granularities
public Granularities()
-
-
Method Details
-
nullToAll
-
decorateCursorBuildSpec
DecoratesCursorBuildSpecwith a grouping column and virtual column equivalent to theGranularityfor aQuery, if that query has granularity other thanALL. If the query has 'ALL' granularity, theCursorBuildSpecwill be returned as is. The reason for this is that a query with a granularity that is not 'ALL' is effectively an additional grouping on TIME_FLOOR(__time, granularity), so by adding this to theCursorBuildSpecallows aCursorHolderto potentially specialize anyCursororVectorCursorit provides by using pre-aggregated data at the closest matching granularity if available. -
toVirtualColumn
@Nullable public static ExpressionVirtualColumn toVirtualColumn(Granularity granularity, String virtualColumnName) Translates aGranularityto aExpressionVirtualColumnonColumnHolder.TIME_COLUMN_NAMEof the equivalent grouping column.- If granularity is
ALL, this method returns null since we are not grouping on time. - If granularity is a
PeriodGranularity, we'd map it toTimestampFloorExprMacro.TimestampFloorExpr. - If granularity is
NONE, or any other kind of granularity (duration, period with non-utc timezone or origin) this method returns a virtual column withIdentifierExprspecifyingColumnHolder.TIME_COLUMN_NAMEdirectly.
- If granularity is
-
fromVirtualColumn
Converts a virtual column with a single input time column into aGranularityif it is aTimestampFloorExprMacro.TimestampFloorExpr.IMPORTANT - this method DOES NOT VERIFY that the virtual column has a single input that is a time column (
ColumnHolder.TIME_COLUMN_NAMEor equivalent projection time column as defined byAggregateProjectionSchema.getTimeColumnName()). Callers must verify this externally before calling this method by examiningVirtualColumn.requiredColumns().This method also does not handle other time expressions, or if the virtual column is just an identifier for a time column
-