trait SupportsPushDownVariants extends Scan
A mix-in interface for Scan. Data sources can implement this interface to
support pushing down variant field access operations to the data source.
When variant columns are accessed with specific field extractions (e.g., variant_get), the optimizer can push these accesses down to the data source. The data source can then read only the required fields from variant columns, reducing I/O and improving performance.
The typical workflow is:
- Optimizer analyzes the query plan and identifies variant field accesses
- Optimizer calls #pushVariantAccesswith the access information
- Data source validates and stores the variant access information
- Optimizer retrieves pushed information via #pushedVariantAccess
- Data source uses the information to optimize reading in #readSchema()and readers
- Annotations
- @Evolving()
- Source
- SupportsPushDownVariants.java
- Since
- 4.1.0 
- Alphabetic
- By Inheritance
- SupportsPushDownVariants
- Scan
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
-   abstract  def pushVariantAccess(variantAccessInfo: Array[VariantAccessInfo]): BooleanPushes down variant field access information to the data source. Pushes down variant field access information to the data source. Implementations should validate if the variant accesses can be pushed down based on the data source's capabilities. If some accesses cannot be pushed down, the implementation can choose to: - Push down only the supported accesses and return true
- Reject all pushdown and return false
 The implementation should store the variant access information that can be pushed down. The stored information will be retrieved later via #pushedVariantAccess().- variantAccessInfo
- Array of variant access information, one per variant column 
- returns
- true if at least some variant accesses were pushed down, false if none were pushed 
 
-   abstract  def pushedVariantAccess(): Array[VariantAccessInfo]Returns the variant access information that has been pushed down to this scan. Returns the variant access information that has been pushed down to this scan. This method is called by the optimizer after #pushVariantAccessto retrieve what variant accesses were actually accepted by the data source. The optimizer uses this information to rewrite the query plan.If #pushVariantAccesswas not called or returned false, this should return an empty array.- returns
- Array of pushed down variant access information 
 
-   abstract  def readSchema(): StructTypeReturns the actual schema of this data source scan, which may be different from the physical schema of the underlying storage, as column pruning or other optimizations may happen. Returns the actual schema of this data source scan, which may be different from the physical schema of the underlying storage, as column pruning or other optimizations may happen. - Definition Classes
- Scan
 
Concrete Value Members
-   final  def !=(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def ##: Int- Definition Classes
- AnyRef → Any
 
-   final  def ==(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def asInstanceOf[T0]: T0- Definition Classes
- Any
 
-    def clone(): AnyRef- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
 
-    def columnarSupportMode(): ColumnarSupportModeSubclasses can implement this method to indicate if the support for columnar data should be determined by each partition or is set as a default for the whole scan. Subclasses can implement this method to indicate if the support for columnar data should be determined by each partition or is set as a default for the whole scan. - Definition Classes
- Scan
- Since
- 3.5.0 
 
-    def description(): StringA description string of this scan, which may includes information like: what filters are configured for this scan, what's the value of some important options like path, etc. A description string of this scan, which may includes information like: what filters are configured for this scan, what's the value of some important options like path, etc. The description doesn't need to include #readSchema(), as Spark already knows it.By default this returns the class name of the implementation. Please override it to provide a meaningful description. - Definition Classes
- Scan
 
-   final  def eq(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-    def equals(arg0: AnyRef): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def getClass(): Class[_ <: AnyRef]- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-    def hashCode(): Int- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-   final  def isInstanceOf[T0]: Boolean- Definition Classes
- Any
 
-   final  def ne(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-   final  def notify(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-   final  def notifyAll(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-    def reportDriverMetrics(): Array[CustomTaskMetric]Returns an array of custom metrics which are collected with values at the driver side only. Returns an array of custom metrics which are collected with values at the driver side only. Note that these metrics must be included in the supported custom metrics reported by supportedCustomMetrics.- Definition Classes
- Scan
- Since
- 3.4.0 
 
-    def supportedCustomMetrics(): Array[CustomMetric]Returns an array of supported custom metrics with name and description. Returns an array of supported custom metrics with name and description. By default it returns empty array. - Definition Classes
- Scan
 
-   final  def synchronized[T0](arg0: => T0): T0- Definition Classes
- AnyRef
 
-    def toBatch(): BatchReturns the physical representation of this scan for batch query. Returns the physical representation of this scan for batch query. By default this method throws exception, data sources must overwrite this method to provide an implementation, if the Tablethat creates this scan returnsTableCapability#BATCH_READsupport in itsTable#capabilities().If the scan supports runtime filtering and implements SupportsRuntimeFiltering, this method may be called multiple times. Therefore, implementations can cache some state to avoid planning the job twice.- Definition Classes
- Scan
- Exceptions thrown
 
-    def toContinuousStream(checkpointLocation: String): ContinuousStreamReturns the physical representation of this scan for streaming query with continuous mode. Returns the physical representation of this scan for streaming query with continuous mode. By default this method throws exception, data sources must overwrite this method to provide an implementation, if the Tablethat creates this scan returnsTableCapability#CONTINUOUS_READsupport in itsTable#capabilities().- checkpointLocation
- a path to Hadoop FS scratch space that can be used for failure recovery. Data streams for the same logical source in the same query will be given the same checkpointLocation. 
 - Definition Classes
- Scan
- Exceptions thrown
 
-    def toMicroBatchStream(checkpointLocation: String): MicroBatchStreamReturns the physical representation of this scan for streaming query with micro-batch mode. Returns the physical representation of this scan for streaming query with micro-batch mode. By default this method throws exception, data sources must overwrite this method to provide an implementation, if the Tablethat creates this scan returnsTableCapability#MICRO_BATCH_READsupport in itsTable#capabilities().- checkpointLocation
- a path to Hadoop FS scratch space that can be used for failure recovery. Data streams for the same logical source in the same query will be given the same checkpointLocation. 
 - Definition Classes
- Scan
- Exceptions thrown
 
-    def toString(): String- Definition Classes
- AnyRef → Any
 
-   final  def wait(arg0: Long, arg1: Int): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-   final  def wait(arg0: Long): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
 
-   final  def wait(): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
Deprecated Value Members
-    def finalize(): Unit- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
- (Since version 9)