Here are my notes from the DSv2 sync last night.

*As usual, I didn’t take great notes because I was participating in the
discussion. Feel free to send corrections or clarification.*

*Attendees*:
Ryan Blue
John Zhuge
Xiao Li
Reynold Xin
Felix Cheung
Anton Okolnychyi
Bruce Robbins
Dale Richardson
Dongjoon Hyun
Genliang Wang
Matt Cheah
Russel Spitzer
Wenchen Fan
Maryann Xue
Jacky Lee

*Topics*:

   - Passing query ID to DSv2 write builder
   - OutputMode in DSv2 writes
   - Catalog API framing to help clarify the discussion
   - Catalog API plugin system
   - Catlaog API approach (separate TableCatalog, FunctionCatalog,
   UDFCatalog, etc.)
   - Proposed TableCatalog API for catalog plugins (SPIP
   
<https://docs.google.com/document/d/1zLFiA1VuaWeVxeTDXNg8bL6GP3BVoOZBkewFtEnjEoo/edit#heading=h.lljaf71h0p55>
   )
   - Migration to new Catalog API from ExternalCatalog
   - Proposed user-facing API for table catalog operations (SPIP
   
<https://docs.google.com/document/d/1zLFiA1VuaWeVxeTDXNg8bL6GP3BVoOZBkewFtEnjEoo/edit#heading=h.cgnrs9vys06x>
   )

*Notes*:

   - Passing query ID to DSv2 write builder
      - Wenchen: query ID is needed for some sources
      - Reynold: this may be useful for batch if batch ever supports
      recovery or resuming a write
      - Ryan: this may also be useful in sources to identify the outputs of
      a particular batch. Iceberg already generates a UUID for each write.
      - Wenchen proposed adding query ID to the newWriteBuilder factory
      method
      - Ryan: if args to newWriteBuilder will change over time, then it is
      easier to maintain them as builder methods
      - Reynold: what does the read side do? [Note: it passes no arguments
      to newScanBuilder]
      - No one knew, so we tabled further discussion
   - OutputMode
      - Wenchen: OutputMode instructs current sources how to handle rows
      written to them.
      - Reynold: discussed with Michael and OutputMode doesn’t need to be
      in this new public API.
      - Ryan: the problem with OutputMode, specifically Update, is that it
      is ambiguous like SaveMode. Update mode doesn’t tell a sink how
to identify
      the records to replace.
      - Reynold: nothing implements Update and it is only defined
      internally, only Append and Complete are needed
      - Ryan: that works for source implementations, but users can pass the
      mode in the API, so Spark should still throw an exception
      - Reynold added SupportsTruncate (similar to SupportsOverwrite) to
      the proposal to configure Complete mode.
      - Ryan added SupportsUpdate to the proposal for how Update mode could
      be configured
      - Discussion clarified that truncate, like overwrite, is not required
      to happen immediately when the builder is configured. This would allow
      sources to implement truncate and append in a single atomic operation for
      each epoch.
   - *Catalog API framing*: there are several issues to discuss. To make
   discussions more effective, let’s try to keep these areas separate:
      - A plugin system for catalog implementations
      - The approach to replace ExternalCatalog with multiple interfaces
      for specific purposes (TableCatalog, FunctionCatalog, etc.)
      - The proposed TableCatalog methods
      - How to migrate from ExternalCatalog to a new catalog API
      - A public API that can handle operations that are currently
      supported only in DDL
      - *Let’s try to keep these discussions separate to make progress on
      each area*
   - *TableCatalog API proposal*: an interface for plugins
   
<https://docs.google.com/document/d/1zLFiA1VuaWeVxeTDXNg8bL6GP3BVoOZBkewFtEnjEoo/edit#heading=h.lljaf71h0p55>
   to expose create/load/alter/drop operations for tables.
      - Ryan provided a summary and pointed out that the part under
      discussion is the plugin API, TableCatalog, NOT the public API
      - Maryann: the proposed API uses 2-level identifiers, but many
      databases support 3 levels
      - Ryan: 2-level identifiers in a catalog is a reasonable
      simplification? Presto does this. A catalog could be used for
each entry in
      the top level in a 3-level database. Otherwise, would Spark support 4
      levels?
      - Someone?: identifiers should support arbitrary levels and the
      problem should be delegated to the catalog. Flexible table identifiers
      could be used to also support path-based tables in the same API
      - Consensus seemed to be around using arbitrary identifiers. [Will
      follow up with a DISCUSS thread]
      - Ryan: identifier is actually orthogonal to most of the proposal; it
      is enough that we assume there is some identifier. Let’s consider this
      proposal with TableIdentifier as a place-holder. Any other concerns about
      this API?
      - Maryann: what about replacing an entire schema [Note: Hive syntax
      supports this]. Alter table passes individual changes, which is difficult
      for some sources to handle.
      - Ryan: the purpose of individual changes is to match how SQL changes
      are expressed. This avoids forcing sources to diff schema trees, which
      would be error prone. Mirroring SQL also avoids schema evolution problems
      caused by replacing a schema with another schema because deletes and adds
      are explicit.
      - Matt: this API is simple and can express all of the changes needed
      - Xiao: why is bucketBy in the proposed public API?
      - Dale: is it possible to pass through column-level configuration?
      For example, column-level compression or encoding config for Kudu.
      - Reynold: StructType supports key-value metadata for this
      - Ryan: the public API should support that metadata
      - Reynold: can this proposal cover how to replace all methods of
      ExternalCatalog?
      - Ryan: this proposal isn’t intended to replace all of
      ExternalCatalog, only the table CRUD methods. Some
ExternalCatalog methods
      may not be in the new API.
      - Reynold: it would be helpful to have that information
      - At this point, time ran out and we decided to resume next time
      discussing a plan to replace ExternalCatalog with a new catalog API.

-- 
Ryan Blue
Software Engineer
Netflix

Reply via email to