Class SchemaNegotiatorImpl

java.lang.Object
org.apache.drill.exec.physical.impl.scan.framework.SchemaNegotiatorImpl
All Implemented Interfaces:
SchemaNegotiator
Direct Known Subclasses:
FileScanFramework.FileSchemaNegotiatorImpl

public class SchemaNegotiatorImpl extends Object implements SchemaNegotiator
Implementation of the schema negotiation between scan operator and batch reader. Anticipates that the select list (and/or the list of predefined fields (implicit, partition) might be set by the scanner. For now, all readers have their own implementation of the select set.

Handles both early- and late-schema readers. Early-schema readers provide a table schema, late-schema readers do not.

If the reader (or, later, the scanner) has a SELECT list, then that select list is pushed down into the result set loader created for the reader.

Also handles parsing out various column types, filling in null columns and (via the vector cache), minimizing changes across readers. In the worst case, a reader might have a column "c" in one file, might skip "c" in the second file, and "c" may appear again in a third file. This negotiator, along with the scan projection and vector cache, "smoothes out" schema changes by preserving the vector for "c" across all three files. In the first and third files "c" is a vector written by the reader, in the second, it is a null column filled in by the scan projector (assuming, of course, that "c" is nullable or an array.)

  • Field Details

    • framework

      protected final ManagedScanFramework framework
    • context

      protected CustomErrorContext context
    • providedSchema

      protected TupleMetadata providedSchema
    • tableSchema

      protected TupleMetadata tableSchema
    • isSchemaComplete

      protected boolean isSchemaComplete
    • batchSize

      protected int batchSize
    • limit

      protected long limit
  • Constructor Details

  • Method Details

    • bind

      public void bind(SchemaNegotiatorImpl.NegotiatorListener listener)
    • isProjectionEmpty

      public boolean isProjectionEmpty()
      Description copied from interface: SchemaNegotiator
      Report whether the projection list is empty, as occurs in two cases:
      • SELECT COUNT(*) ... -- empty project.
    • SELECT a, b FROM table(c d) -- disjoint project.