Thanks Jack! I feel Question 0 is very broad, essentially capturing the
whole design. Can we start by discussing more granular questions?

On Wed, Feb 21, 2024 at 8:53 PM Jack Ye <yezhao...@gmail.com> wrote:

> Thanks everyone for the help in organizing the thoughts!
>
> I have moved the summary of everyone's comments here also to the doc that
> Jan linked under question 0. We can continue to have more discussions there
> and cast votes!
>
> Best,
> Jack Ye
>
> On Wed, Feb 21, 2024 at 12:14 PM Jan Kaul <jank...@mailbox.org.invalid>
> wrote:
>
>> Thanks Micah, I think the voting chips are great.
>>
>> @Szehon, actually what I had in mind was not to have one thread per
>> question but rather have smaller threads that can be resolved more easily.
>> I have the fear that one thread for the current question would lead to a
>> very long and unmanageable discussion.
>>
>> I've added another row to the table where everyone could provide a
>> summary of their reason for choosing a certain design. This way we could
>> move some of the content from the comment threads to the main document.
>> On 21.02.24 19:58, Micah Kornfield wrote:
>>
>> Of course we also need threads that express our preferences (voting). I
>>> would suggest to keep these separate from discussions about single points
>>> so that they can be persisted in the document.
>>
>>
>> Not sure if it helpful, but I added voting chips Question 0, as maybe an
>> easier way to keep track of votes.  If it is helpful, I can add them in
>> other places that still need a vote (I think one needs a paid Google Docs
>> account to insert them).
>>
>> Thanks,
>> Micah
>>
>> On Wed, Feb 21, 2024 at 10:23 AM Szehon Ho <szehon.apa...@gmail.com>
>> wrote:
>>
>>> Thanks Jan.  +1 on having just one thread per question for
>>> vote/preference.  Where do you suggest we have it, on the discussion
>>> question itself?  It would be to keep the existing threads and move it
>>> there.
>>>
>>> Also, I think it makes sense with making a slack channel (for quick
>>> question, reply) , and also discuss unresolved questions in the next week's
>>> sync or a separate meeting.
>>>
>>> On Wed, Feb 21, 2024 at 12:40 AM Jan Kaul <jank...@mailbox.org.invalid>
>>> <jank...@mailbox.org.invalid> wrote:
>>>
>>>> Thank you Jack for driving the consensus for the MV spec and thank you
>>>> all for the discussion.
>>>>
>>>> I really like the idea about incremental consensus because we often
>>>> loose sight in detailed discussions. As Jack mentioned, the highest
>>>> priority question currently is:
>>>>
>>>> *Should the Iceberg MV be realized as a view + storage table or do we
>>>> define a new metadata format? *To have one place for the discussion, I
>>>> created another Question (
>>>> https://docs.google.com/document/d/1UnhldHhe3Grz8JBngwXPA6ZZord1xMedY5ukEhZYF-A/edit?pli=1#heading=h.y70rtfhi9qxi)
>>>> to the Materialized View Spec google document.
>>>>
>>>> To improve the visibility of the arguments I would like to propose a
>>>> new process. It would be great if all relevant information is stored in the
>>>> document itself. Therefore I would suggest to use the comment threads for
>>>> smaller, temporary discussions which can be resolved by adding the points
>>>> to the main document. Please close the threads if the information was added
>>>> to the document. Additionally, I gave you all permissions to edit the
>>>> documents, so you can add missing points yourselves.
>>>>
>>>> Of course we also need threads that express our preferences (voting). I
>>>> would suggest to keep these separate from discussions about single points
>>>> so that they can be persisted in the document.
>>>>
>>>> After a phase of collecting arguments for the different designs I think
>>>> it would make sense to have video call to have a face to face discussion.
>>>>
>>>> What do you think?
>>>>
>>>> Best wishes,
>>>>
>>>> Jan
>>>> On 20.02.24 21:32, Manish Malhotra wrote:
>>>>
>>>> Very excited for MV to be in Iceberg :)
>>>> Keeping in the same doc. would be helpful, to have the trail.
>>>> But also agreed, if there are too many directions/threads, then keep
>>>> closing the old one, if there are no more questions.
>>>> And put down the assumptions for the initial version to move forward.
>>>>
>>>>
>>>> On Tue, Feb 20, 2024 at 12:17 PM Walaa Eldin Moustafa <
>>>> wa.moust...@gmail.com> wrote:
>>>>
>>>>> I would vote to keep a log in the doc with open questions, and keep
>>>>> the doc updated with open questions as they arise/get resolved.
>>>>>
>>>>> On Tue, Feb 20, 2024 at 11:37 AM Jack Ye <yezhao...@gmail.com> wrote:
>>>>>
>>>>>> Thanks for the response from everyone!
>>>>>>
>>>>>> Before proceeding further, I see a few people referring back to the
>>>>>> current design from Jan. I specifically raised this thread based on the
>>>>>> information in the doc and a few latest discussions we had there. Because
>>>>>> there are many threads in the doc, and each thread points further to 
>>>>>> other
>>>>>> discussion threads in the same doc or other doc, it is now quite hard to
>>>>>> follow and continue discussing all different topics there.
>>>>>>
>>>>>> I hope we can make incremental consensus of the questions in the doc
>>>>>> through devlist, because it provides more visibility, and also a single
>>>>>> thread instead of multiple threads going on at the same time. If we think
>>>>>> this format is not effective, I propose that we create a new mv channel 
>>>>>> in
>>>>>> Iceberg Slack workspace, and people interested can join and discuss all
>>>>>> these points directly. What do we think?
>>>>>>
>>>>>> Best,
>>>>>> Jack Ye
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Feb 19, 2024 at 6:03 PM Szehon Ho <szehon.apa...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> Great to see more discussion on the MV spec.  Actually, Jan's
>>>>>>> document "Iceberg Materialized View Spec"
>>>>>>> <https://docs.google.com/document/d/1UnhldHhe3Grz8JBngwXPA6ZZord1xMedY5ukEhZYF-A>
>>>>>>>  has
>>>>>>> been organized , with a "Design Questions" section to track these 
>>>>>>> debates,
>>>>>>> and it would be nice to centralize the debates there, as Micah mentions.
>>>>>>>
>>>>>>> For Dan's question, I think this debate was tracked in "Design Question
>>>>>>> 3: Should the storage table be registered in the catalog?". I think the
>>>>>>> general idea there was to not expose it directly via Catalog as it is 
>>>>>>> then
>>>>>>> exposed to user modification. If the engine wants to access anything 
>>>>>>> about
>>>>>>> the storage table (including audit and storage), it is of course there 
>>>>>>> via
>>>>>>> the storage table pointer. I think Walaa's point is also good, we could
>>>>>>> expose it as we expose metadata tables, but I am still not sure if 
>>>>>>> there is
>>>>>>> still some use-cases of engine access not covered?
>>>>>>>
>>>>>>> It is true that for Jack's initial question (Do we really want to go
>>>>>>> with the MV = view + storage table design approach for Iceberg MV?),
>>>>>>> unfortunately we did not capture it as a "Design Question" in Jan's 
>>>>>>> doc, as
>>>>>>> it was an implicit assumption of 'yes', because it is the choice of 
>>>>>>> Hive,
>>>>>>> Trino, and other engines , as others have pointed out.
>>>>>>>
>>>>>>> Jack's point about potential evolution of MV (like to add
>>>>>>> partitioning) is an interesting one, but definitely hard to grasp.  I 
>>>>>>> think
>>>>>>> it makes sense to add this as a separate Design Question in the doc, and
>>>>>>> add the options.  This will allow us to flesh out this alternative
>>>>>>> option(s).  Maybe Micah's point about modifying existing proposal to
>>>>>>> 'embed' the required table metadata fields in the existing view 
>>>>>>> metadata,
>>>>>>> is one middle ground option.  Or we add a totally new MV object spec for
>>>>>>> MV, separate than existing View spec?
>>>>>>>
>>>>>>> Also , as Jack pointed out, it may make sense to have the REST /
>>>>>>> Catalog API proposal in the doc to educate the above decision.
>>>>>>>
>>>>>>> Thanks
>>>>>>> Szehon
>>>>>>>
>>>>>>> On Mon, Feb 19, 2024 at 4:08 PM Walaa Eldin Moustafa <
>>>>>>> wa.moust...@gmail.com> wrote:
>>>>>>>
>>>>>>>> I think it would help if we answer the question of whether an MV is
>>>>>>>> a view + storage table (and degree of exposing this underlying
>>>>>>>> implementation) in the context of the user interfacing with those 
>>>>>>>> concepts:
>>>>>>>>
>>>>>>>> For the end user, interfacing with the engine APIs (e.g., through
>>>>>>>> SQL), materialized view APIs should be almost the same as regular view 
>>>>>>>> APIs
>>>>>>>> (except for operations specific to materialized views like REFRESH 
>>>>>>>> command
>>>>>>>> etc). Typically, the end user interacts with the (materialized) view 
>>>>>>>> object
>>>>>>>> as a view, and the engine performs the abstraction over the storage 
>>>>>>>> table.
>>>>>>>>
>>>>>>>> For the engines interfacing with Iceberg, it sounds the correct
>>>>>>>> abstraction at this layer is indeed view + storage table, and engines 
>>>>>>>> could
>>>>>>>> have access to both objects to optimize queries.
>>>>>>>>
>>>>>>>> So in a sense, the engine will ultimately hide most of the
>>>>>>>> storage detail from the end user (except for advanced users who want to
>>>>>>>> explicitly access the storage table with a modifier like
>>>>>>>> "db.view.storageTable" -- and they can only read it), while Iceberg 
>>>>>>>> will
>>>>>>>> expose the storage details to the engine catalog to use it in scans if
>>>>>>>> needed. So the storage table is hidden or exposed based on the 
>>>>>>>> context/the
>>>>>>>> actual users. From Iceberg point of view (which interacts with the
>>>>>>>> engines), the storage table is exposed. Note that this does not
>>>>>>>> necessarily mean that the storage table is registered in the catalog 
>>>>>>>> with
>>>>>>>> its own independent name (e.g., where we can drop the view but keep the
>>>>>>>> storage table and access it from the catalog). Addressing the storage 
>>>>>>>> table
>>>>>>>> using a virtual namespace like "db.view.storageTable" sounds like a 
>>>>>>>> good
>>>>>>>> middle ground. Anyways, end users should not need to directly access 
>>>>>>>> the
>>>>>>>> storage table in most cases.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Walaa.
>>>>>>>>
>>>>>>>> On Mon, Feb 19, 2024 at 3:38 PM Micah Kornfield <
>>>>>>>> emkornfi...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Jack,
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> In my mind, the first key point we all need to agree upon to move
>>>>>>>>>> this design forward is*: Do we really want to go with the MV =
>>>>>>>>>> view + storage table design approach for Iceberg MV?*
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I think we want this to the extent that we do not want to redefine
>>>>>>>>> the same concept with different representations/naming to the greatest
>>>>>>>>> degree possible.  This is why borrowing the concepts from the view 
>>>>>>>>> (e.g.
>>>>>>>>> multiple ways of expressing the same view logic in different 
>>>>>>>>> dialects) and
>>>>>>>>> aspects of the materialized data (e.g. partitioning, ordering) feels 
>>>>>>>>> most
>>>>>>>>> natural.  IIUC your proposal, I think you are saying maybe two
>>>>>>>>> modifications to the existing proposals in the document:
>>>>>>>>>
>>>>>>>>> 1.  No separate storage table link, instead embed most of the
>>>>>>>>> metadata of the materialized table into the MV document (the exception
>>>>>>>>> seems to be snapshot history)
>>>>>>>>> 2.  For snapshot history, have one unified history specific to the
>>>>>>>>> MV.
>>>>>>>>>
>>>>>>>>> This seems fairly reasonable to me and I think I can solve some
>>>>>>>>> challenges with the existing proposal in an elegant way.  If this is
>>>>>>>>> correct (or maybe if it isn't quite correct) perhaps you can make
>>>>>>>>> suggestions to the document so all of the trade-offs can be discussed 
>>>>>>>>> in
>>>>>>>>> one place?
>>>>>>>>>
>>>>>>>>> I think the one thing the current draft of the materialized view
>>>>>>>>> ignores is how to store algebraic summaries (e.g. separate sum and 
>>>>>>>>> count
>>>>>>>>> for averages, or other sketches), so that new data can be 
>>>>>>>>> incrementally
>>>>>>>>> incorporated.  But representing these structures feels like it 
>>>>>>>>> potentially
>>>>>>>>> has value beyond just MVs (e.g. it can be a natural way to express 
>>>>>>>>> summary
>>>>>>>>> statistics in table metadata), so I think it deserves at least a try 
>>>>>>>>> in
>>>>>>>>> incorporating the concepts in the table specification, so the 
>>>>>>>>> definitions
>>>>>>>>> can be shared.  I was imagining this could come as part of the next
>>>>>>>>> revision of MV specification.
>>>>>>>>>
>>>>>>>>> The MV internal structure could evolve in a way that works more
>>>>>>>>>> efficiently with the reduced scope of functionalities, without 
>>>>>>>>>> relying on
>>>>>>>>>> table to offer the same capabilities. I can at least say that is 
>>>>>>>>>> true based
>>>>>>>>>> on my internal knowledge of how Redshift MVs work.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I'm not sure I fully understand this point, but it seems the main
>>>>>>>>> question here is what would break if it started to evolve in this
>>>>>>>>> direction.  Is it purely additive or do we suspect some elements 
>>>>>>>>> would need
>>>>>>>>> to be removed?  My gut feeling here is the main concerns here are  
>>>>>>>>> getting
>>>>>>>>> the cardinatities correct (i.e. 1 MV should probably have 0, 1 or more
>>>>>>>>> materialized storage tables associated with it, to support more 
>>>>>>>>> advanced
>>>>>>>>> algebraic structures listed above, and perhaps a second without them, 
>>>>>>>>> and
>>>>>>>>> additional metadata to distinguish between these two different modes).
>>>>>>>>>
>>>>>>>>> If after the evaluation, we are confident that the MV = view +
>>>>>>>>>> storage table approach is the right way to go, then we can debate 
>>>>>>>>>> the other
>>>>>>>>>> issues, and I think the next issue to reach consensus should be 
>>>>>>>>>> "Should the
>>>>>>>>>> storage table be registered in the catalog?".
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I actually think there are actually more fundamental questions
>>>>>>>>> posed:
>>>>>>>>> 1.  Should be considering how items should be modelled in the REST
>>>>>>>>> API concurrently with the Iceberg spec, as that potentially impacts 
>>>>>>>>> design
>>>>>>>>> decision (I think the answer is yes, and we should update the doc with
>>>>>>>>> sketches on new endpoints and operations on the endpoints to ensure 
>>>>>>>>> things
>>>>>>>>> align).
>>>>>>>>> 2.  Going forward should new aspects of Iceberg artifacts rely on
>>>>>>>>> the fact that a catalog is present and we can rely on a naming 
>>>>>>>>> convention
>>>>>>>>> for looking up other artifacts in a catalog as pointers (I lean yes on
>>>>>>>>> this, but I'm a little bit more ambivalent).
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Micah
>>>>>>>>>
>>>>>>>>> On Mon, Feb 19, 2024 at 12:52 PM Jack Ye <yezhao...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> I suggest we need a step-by-step process to make incremental
>>>>>>>>>> consensus, otherwise we are constantly talking about many different 
>>>>>>>>>> debates
>>>>>>>>>> at the same time.
>>>>>>>>>>
>>>>>>>>>> In my mind, the first key point we all need to agree upon to move
>>>>>>>>>> this design forward is*: Do we really want to go with the MV =
>>>>>>>>>> view + storage table design approach for Iceberg MV?*
>>>>>>>>>>
>>>>>>>>>> I think we (at least me) started with this assumption, mostly
>>>>>>>>>> because this is how Trino implements MV, and how Hive tables store MV
>>>>>>>>>> information today. But does it mean we should design it that way in 
>>>>>>>>>> Iceberg?
>>>>>>>>>>
>>>>>>>>>> Now I look back at how we did the view spec design, we could also
>>>>>>>>>> say that we just add a representation field in the table spec to 
>>>>>>>>>> store
>>>>>>>>>> view, and an Iceberg view is just a table with no data but with
>>>>>>>>>> representations defined. But we did not do that. So it feels now 
>>>>>>>>>> quite
>>>>>>>>>> inconsistent to say we want to just add a few fields in the table 
>>>>>>>>>> and view
>>>>>>>>>> spec to call it an Iceberg MV.
>>>>>>>>>>
>>>>>>>>>> If we look into most of the other database systems (e.g.
>>>>>>>>>> Redshift, BigQuery, Snowflake), they never expose such implementation
>>>>>>>>>> details like storage table. Apart from being close-sourced systems, 
>>>>>>>>>> I think
>>>>>>>>>> it is also for good technical reasons. There are many more things 
>>>>>>>>>> that a
>>>>>>>>>> table needs to support, but does not really apply to MV. The MV 
>>>>>>>>>> internal
>>>>>>>>>> structure could evolve in a way that works more efficiently with the
>>>>>>>>>> reduced scope of functionalities, without relying on table to offer 
>>>>>>>>>> the
>>>>>>>>>> same capabilities. I can at least say that is true based on my 
>>>>>>>>>> internal
>>>>>>>>>> knowledge of how Redshift MVs work.
>>>>>>>>>>
>>>>>>>>>> I think we should fully evaluate both directions, and commit to
>>>>>>>>>> one first before debating more things.
>>>>>>>>>>
>>>>>>>>>> If we have a new and independent Iceberg MV spec, then an Iceberg
>>>>>>>>>> MV is under-the-hood a single object containing all MV information. 
>>>>>>>>>> It has
>>>>>>>>>> its own name, snapshots, view representation, etc. I don't believe 
>>>>>>>>>> we will
>>>>>>>>>> be blocked by Trino due to its MV SPIs currently requiring the 
>>>>>>>>>> existence of
>>>>>>>>>> a storage table, as it will just be a different implementation from 
>>>>>>>>>> the
>>>>>>>>>> existing one in Trino-Iceberg. In this direction, I don't think we 
>>>>>>>>>> need to
>>>>>>>>>> have any further debate about pointers, metadata locations, storage 
>>>>>>>>>> table,
>>>>>>>>>> etc. because everything will be new.
>>>>>>>>>>
>>>>>>>>>> If after the evaluation, we are confident that the MV = view +
>>>>>>>>>> storage table approach is the right way to go, then we can debate 
>>>>>>>>>> the other
>>>>>>>>>> issues, and I think the next issue to reach consensus should be 
>>>>>>>>>> "Should the
>>>>>>>>>> storage table be registered in the catalog?".
>>>>>>>>>>
>>>>>>>>>> What do we think?
>>>>>>>>>>
>>>>>>>>>> -Jack
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Feb 19, 2024 at 11:32 AM Daniel Weeks <dwe...@apache.org>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Jack,
>>>>>>>>>>>
>>>>>>>>>>> I think we should consider either allowing the storage table to
>>>>>>>>>>> be fully exposed/addressable via the catalog or allow access via
>>>>>>>>>>> namespacing like with metadata tables.  E.g.
>>>>>>>>>>> <catalog>.<database>.<table>.<storage>, which would allow for full 
>>>>>>>>>>> access
>>>>>>>>>>> to the underlying table.
>>>>>>>>>>>
>>>>>>>>>>> For other engines to interact with the storage table (e.g. to
>>>>>>>>>>> execute the query to materialize the table), it may be necessary 
>>>>>>>>>>> that the
>>>>>>>>>>> table is fully addressable.  Whether the storage table is returned 
>>>>>>>>>>> as part
>>>>>>>>>>> of list operations may be something we leave up to the catalog
>>>>>>>>>>> implementation.
>>>>>>>>>>>
>>>>>>>>>>> I don't think the table should reference a physical location
>>>>>>>>>>> (only a logical reference) since things will be changing behind the 
>>>>>>>>>>> view
>>>>>>>>>>> definition and I'm not confident we want to have to update the view
>>>>>>>>>>> representation everytime the storage table is updated.
>>>>>>>>>>>
>>>>>>>>>>> I think there's still some exploration as to whether we need to
>>>>>>>>>>> model this as separate from view endpoints, but there may be enough 
>>>>>>>>>>> overlap
>>>>>>>>>>> that it's not necessary to have yet another set of endpoints for
>>>>>>>>>>> materialized views (maybe filter params if you need to 
>>>>>>>>>>> distinguish?).
>>>>>>>>>>>
>>>>>>>>>>> -Dan
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sun, Feb 18, 2024 at 6:57 PM Renjie Liu <
>>>>>>>>>>> liurenjie2...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi, Jack:
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for raising this.
>>>>>>>>>>>>
>>>>>>>>>>>> In most database systems, MV, view and table are considered
>>>>>>>>>>>>> independent objects, at least at API level. It is very rare for a 
>>>>>>>>>>>>> system to
>>>>>>>>>>>>> support operations like "materializing a logical view" or 
>>>>>>>>>>>>> "upgrading a
>>>>>>>>>>>>> logical view to MV", because view and MV are very different in 
>>>>>>>>>>>>> almost every
>>>>>>>>>>>>> aspect of user experience. Extending the existing view or table 
>>>>>>>>>>>>> spec to
>>>>>>>>>>>>> accommodate MV might give us a MV implementation similar to the 
>>>>>>>>>>>>> current
>>>>>>>>>>>>> Trino or Hive views, save us some effort and a few APIs in REST, 
>>>>>>>>>>>>> but it
>>>>>>>>>>>>> binds us to a very specific design of MV, which we might regret 
>>>>>>>>>>>>> in the
>>>>>>>>>>>>> future.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> When I reviewed the doc, I thought we were discussing the spec
>>>>>>>>>>>> of materialized view, just like the spec of table metadata, but 
>>>>>>>>>>>> didn't not
>>>>>>>>>>>> the user facing api. I would definitely agree that we should 
>>>>>>>>>>>> consider MV as
>>>>>>>>>>>> another kind of database object in user facing api, even though 
>>>>>>>>>>>> it's
>>>>>>>>>>>> internally modelled as a view + storage table pointer.
>>>>>>>>>>>>
>>>>>>>>>>>> If we want to make the REST experience good for MV, I think we
>>>>>>>>>>>>> should at least consider directly describing the full metadata of 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> storage table in Iceberg view, instead of pointing to a JSON file.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Do you mean we need to add components like
>>>>>>>>>>>> `LoadMaterializedViewResponse`, if so, I would +1 for this.
>>>>>>>>>>>>
>>>>>>>>>>>> *Q2: what REST APIs do we expect to use for interactions with
>>>>>>>>>>>>> MVs?*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> As I have mentioned above,  I think we should consider MV as
>>>>>>>>>>>> another database object, so I think we should add a set of apis
>>>>>>>>>>>> specifically designed for MV, such as `loadMV`, `freshMV`.
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Feb 17, 2024 at 11:14 AM Jack Ye <yezhao...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi everyone,
>>>>>>>>>>>>>
>>>>>>>>>>>>> As we are discussing the spec change for materialized view,
>>>>>>>>>>>>> there has been a missing aspect that is technically also related, 
>>>>>>>>>>>>> and might
>>>>>>>>>>>>> affect the MV spec design: *how do we want to add MV support
>>>>>>>>>>>>> to the REST spec?*
>>>>>>>>>>>>>
>>>>>>>>>>>>> I would like to discuss this in a new thread to collect
>>>>>>>>>>>>> people's thoughts. This topic expands to the following 2 
>>>>>>>>>>>>> sub-questions:
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Q1: how would the MV spec change affect the REST spec?*
>>>>>>>>>>>>> In the current proposal, it looks like we are using a design
>>>>>>>>>>>>> where a MV is modeled as an Iceberg view linking to an Iceberg 
>>>>>>>>>>>>> storage
>>>>>>>>>>>>> table. At the same time, we do not want to expose this storage 
>>>>>>>>>>>>> table in the
>>>>>>>>>>>>> catalog, thus the Iceberg view has a pointer to only a metadata 
>>>>>>>>>>>>> JSON file
>>>>>>>>>>>>> of the Iceberg storage table. Each MV refresh updates the pointer 
>>>>>>>>>>>>> to a new
>>>>>>>>>>>>> metadata JSON file.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I feel this does not play very well with the direction that
>>>>>>>>>>>>> REST is going. The REST catalog is trying to remove the 
>>>>>>>>>>>>> dependency to the
>>>>>>>>>>>>> metadata JSON file. For example, in LoadTableResponse the only 
>>>>>>>>>>>>> required
>>>>>>>>>>>>> field is the metadata, and metadata-location is actually optional.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If we want to make the REST experience good for MV, I think we
>>>>>>>>>>>>> should at least consider directly describing the full metadata of 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> storage table in Iceberg view, instead of pointing to a JSON file.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Q2: what REST APIs do we expect to use for interactions with
>>>>>>>>>>>>> MVs?*
>>>>>>>>>>>>> So far we have been thinking about amending the view spec to
>>>>>>>>>>>>> accommodate MV. This entails likely having MVs also being handled 
>>>>>>>>>>>>> through
>>>>>>>>>>>>> the view APIs in REST spec.
>>>>>>>>>>>>>
>>>>>>>>>>>>> We need to agree with that first in the community, because
>>>>>>>>>>>>> this has various implications, and I am not really sure at this 
>>>>>>>>>>>>> point if it
>>>>>>>>>>>>> is the best way to go.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If MV interactions are through the view APIs, the view APIs
>>>>>>>>>>>>> need to be updated to accommodate MV constructs that are not 
>>>>>>>>>>>>> really related
>>>>>>>>>>>>> to logical views. In fact, most actions performed on MVs are more 
>>>>>>>>>>>>> similar
>>>>>>>>>>>>> to actions performed on table rather than view, which involve 
>>>>>>>>>>>>> configuring
>>>>>>>>>>>>> data layout, read and write constructs. For example, users might 
>>>>>>>>>>>>> run
>>>>>>>>>>>>> something like:
>>>>>>>>>>>>>
>>>>>>>>>>>>> CREATE MATERIALIZED VIEW mv
>>>>>>>>>>>>> PARTITION BY col1
>>>>>>>>>>>>> CLUSTER BY col2
>>>>>>>>>>>>> AS ( // some sql )
>>>>>>>>>>>>>
>>>>>>>>>>>>> then the CreateView API needs to accept partition spec and
>>>>>>>>>>>>> sort order that are completely not relevant for logical views.
>>>>>>>>>>>>>
>>>>>>>>>>>>> When reading a MV, we might even want to have a
>>>>>>>>>>>>> PlanMaterializedView API similar to the PlanTable API we are 
>>>>>>>>>>>>> adding.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *My personal take*
>>>>>>>>>>>>> It feels like we need to reconsider the question of what is
>>>>>>>>>>>>> the best way to model MV in Iceberg. Should it be (1) a view 
>>>>>>>>>>>>> linked to a
>>>>>>>>>>>>> storage table, or (2) a table with a view SQL associated with it, 
>>>>>>>>>>>>> or (3)
>>>>>>>>>>>>> it's a completely independent thing. This topic was discussed in 
>>>>>>>>>>>>> the past in
>>>>>>>>>>>>> this doc
>>>>>>>>>>>>> <https://docs.google.com/document/d/1QAuy-meSZ6Oy37iPym8sV_n7R2yKZOHunVR-ZWhhZ6Q/edit?pli=1>,
>>>>>>>>>>>>> but at that time we did not have much perspective about aspects 
>>>>>>>>>>>>> like REST
>>>>>>>>>>>>> spec, and the view integration was also not fully completed yet. 
>>>>>>>>>>>>> With the
>>>>>>>>>>>>> new knowledge, currently I am actually leaning a bit more towards 
>>>>>>>>>>>>> (3).
>>>>>>>>>>>>>
>>>>>>>>>>>>> In most database systems, MV, view and table are considered
>>>>>>>>>>>>> independent objects, at least at API level. It is very rare for a 
>>>>>>>>>>>>> system to
>>>>>>>>>>>>> support operations like "materializing a logical view" or 
>>>>>>>>>>>>> "upgrading a
>>>>>>>>>>>>> logical view to MV", because view and MV are very different in 
>>>>>>>>>>>>> almost every
>>>>>>>>>>>>> aspect of user experience. Extending the existing view or table 
>>>>>>>>>>>>> spec to
>>>>>>>>>>>>> accommodate MV might give us a MV implementation similar to the 
>>>>>>>>>>>>> current
>>>>>>>>>>>>> Trino or Hive views, save us some effort and a few APIs in REST, 
>>>>>>>>>>>>> but it
>>>>>>>>>>>>> binds us to a very specific design of MV, which we might regret 
>>>>>>>>>>>>> in the
>>>>>>>>>>>>> future.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If we make a new MV spec, it can be made up of fields that
>>>>>>>>>>>>> already exist in the table and view specs, but it is a whole new 
>>>>>>>>>>>>> spec. In
>>>>>>>>>>>>> this way, the spec can evolve independently to accommodate MV 
>>>>>>>>>>>>> specific
>>>>>>>>>>>>> features, and we can also create MV-related REST endpoints that 
>>>>>>>>>>>>> will evolve
>>>>>>>>>>>>> independently from table and view REST APIs.
>>>>>>>>>>>>>
>>>>>>>>>>>>> But on the other side it is definitely associated with more
>>>>>>>>>>>>> work to maintain a new spec, and potentially big refactoring in 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> codebase to make sure operations today that work on table or view 
>>>>>>>>>>>>> can now
>>>>>>>>>>>>> support MV as a different object. And it definitely has other 
>>>>>>>>>>>>> problems that
>>>>>>>>>>>>> I have overlooked. I would greatly appreciate any thoughts about 
>>>>>>>>>>>>> this!
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best,
>>>>>>>>>>>>> Jack Ye
>>>>>>>>>>>>>
>>>>>>>>>>>>>

Reply via email to