Hi,

Consider a REST catalog and a user calls "CREATE OR REPLACE <table>"
command. When processing the command, engines will usually initiate a
"createOrReplace" transaction and add metadata, such as the properties of a
new table.

Users expect a table to be replaced with a new one if it exists,
including properties. However, I observe the following:

   1. RESTSessionCatalog loads previous table metadata, adds new properties
   (MetadataUpdate.SetProperties), and invokes the backend
   2. The backend (e.g., Polaris) will typically invoke
   "CatalogHandler.updateTable." There, the previous table state, including
   its properties, is loaded
   3. Finally, metadata updates are applied, and old table properties are
   merged with new ones. That is, if the old table has properties [a=1, b=2],
   and the new table has properties [b=3, c=4], then the final properties
   would be [a=1, b=3, c=4], while the user expects [b=3, c=4].

It looks like a bug because the user expects complete property replacement
instead of a merge. Shall we explicitly clear all previous properties
in RESTSessionCatalog.Builder.replaceTransaction?

Regards,
Vladimir.



-- 
*Vladimir Ozerov*
Founder
querifylabs.com

Reply via email to