*Attendees*:

Ryan Blue
Terry Kim
Wenchen Fan
Jose Torres
Jacky Lee
Gengliang Wang

*Topics*:

   - DROP NAMESPACE cascade behavior
   - 3.0 tasks
   - TableProvider API changes
   - V1 and V2 table resolution rules
   - Separate logical and physical write (for streaming)
   - Bucketing support (if time)
   - Open PRs

*Discussion*:

   - DROP NAMESPACE cascade
      - Terry: How should the cascade option be handled?
      - Ryan: The API currently requires failing when the namespace is
      non-empty; the intent is for Spark to handle the complexity of recursive
      deletes
      - Wenchen: That will be slow because Spark has to list and issue
      individual delete calls.
      - Ryan: What about changing this so that DROP is always a recursive
      drop? Then Spark can check all implemented features (views for
ViewCatalog,
      tables for TableCatalog) and we don’t need to add more calls and args.
      - Consensus was to update dropNamespace so that it is always
      cascading, so implementations can speed up the operation. Spark
will check
      whether a namespace is empty and not issue the call if it is non-empty or
      the query was not cascading.
   - Remaining 3.0 tasks:
      - Add inferSchema and inferPartitioning to TableProvider (#26297)
      - Add catalog and identifier methods so that DataFrameWriter can
      support ErrorIfExists and Ignore modes
   - TableProvider changes:
      - Wenchen: tables need both schema and partitioning. Sometimes these
      are provided but not always. Currently, they are inferred if not
provided,
      but this is implicit based on whether they are passed.
      - Wenchen: A better API is to add inferSchema and inferPartitioning
      that are separate from getTable, so they are always explicitly passed to
      getTable.
      - Wenchen: the only problem is on the write path, where inference is
      not currently done for path-based tables. The PR has a special
case to skip
      inference in this case.
      - Ryan: Sounds okay, will review soon.
      - Ryan: Why is inference so expensive?
      - Wenchen: No validation on write means extra validation is needed to
      read. All file schemas should be used to ensure compatibility.
Partitioning
      is similar: more examples are needed to determine partition column types.
   - Resolution rules
      - Ryan: we found that the v1 and v2 rules are order dependent.
      Wenchen has a PR, but it rewrites the v1 ResolveRelations rule. That’s
      concerning because we don’t want to risk breaking v1 in 3.0. So
we need to
      find a work-around
      - Wenchen: Burak suggested a work-around that should be a good
      approach
      - Ryan: Agreed. And in the long term, I don’t think we want to mix
      view and table resolution. View resolution is complicated because it
      requires context (e.g., current db). But it shouldn’t be necessary to
      resolve tables at the same time. Identifiers can be rewritten to avoid
      this. We should also consider moving view resolution into an
earlier batch.
      In that case, view resolution would happen in a fixed-point batch and it
      wouldn’t need the custom recursive code.
      - Ryan: Can permanent views resolve temporary views? If not, we can
      move temporary views sooner, which would help simplify the v2 resolution
      rules.
   - Separating logical and physical writes
      - Wenchen: there is a use case to add physical information to
      streaming writes, like parallelism. The way streaming is
written, it makes
      sense to separate writes into logical and physical stages, like the read
      side with Scan and Batch.
      - Ryan: So this would create separate Write and Batch objects? Would
      this move epoch ID to the creation of a batch write?
      - Wenchen: maybe. Will write up a design doc. Goal is to get this
      into Spark 3.0 if possible
      - Ryan: Okay, but I think TableProvider is still high priority for
      the 3.0 work
      - Wenchen: Agreed.

-- 
Ryan Blue
Software Engineer
Netflix

Reply via email to