+1 to vote

On Tue, May 30, 2023 at 6:22 PM yu zelin <[email protected]> wrote:
>
> Hi, all,
>
> Does anyone have questions or feedbacks?
>
> I will wait a while for your reply. If no, I’d like to start a vote later.
>
> Best,
> Yu Zelin
>
> > 2023年5月30日 16:19,yu zelin <[email protected]> 写道:
> >
> > I agree with you @Jingsong.
> >
> > Best,
> > Yu Zelin
> >
> >> 2023年5月30日 16:15,Jingsong Li <[email protected]> 写道:
> >>
> >> I think we can just throw exceptions for pure numeric tag names.
> >>
> >> Iceberg's behavior looks confusing.
> >>
> >> Best,
> >> Jingsong
> >>
> >> On Tue, May 30, 2023 at 3:40 PM yu zelin <[email protected]> wrote:
> >>>
> >>> Hi, Shammon,
> >>>
> >>> An intuitive way is use numeric string to indicate snapshot and 
> >>> non-numeric string to indicate tag.
> >>> For example:
> >>>
> >>> SELECT * FROM t VERSION AS OF 1  —to snapshot #1
> >>> SELECT * FROM t VERSION AS OF ‘last_year’ —to tag `last_year`
> >>>
> >>> This is also how iceberg do [1].
> >>>
> >>> However, if we use this way, the tag name cannot be numeric string. I 
> >>> think this is acceptable and I will add this to the document.
> >>>
> >>> Best,
> >>> Yu Zelin
> >>>
> >>> [1] https://iceberg.apache.org/docs/latest/spark-queries/#sql
> >>>
> >>>> 2023年5月30日 12:17,Shammon FY <[email protected]> 写道:
> >>>>
> >>>> Hi zelin,
> >>>>
> >>>> Thanks for your update. I have one comment about Time Travel on 
> >>>> savepoint.
> >>>>
> >>>> Currently we can use statement in spark for specific snapshot 1
> >>>> SELECT * FROM t VERSION AS OF 1;
> >>>>
> >>>> My point is how can we distinguish between snapshot and savepoint when
> >>>> users submit a statement as followed:
> >>>> SELECT * FROM t VERSION AS OF <version value>;
> >>>>
> >>>> Best,
> >>>> Shammon FY
> >>>>
> >>>> On Tue, May 30, 2023 at 11:37 AM yu zelin <[email protected]> wrote:
> >>>>
> >>>>> Hi, Jingsong,
> >>>>>
> >>>>> Thanks for your feedback.
> >>>>>
> >>>>> ## TAG ID
> >>>>> It seems the id is useless currently. I’ll remove it.
> >>>>>
> >>>>> ## Time Travel Syntax
> >>>>> Since tag id is removed, we can just use:
> >>>>>
> >>>>> SELECT * FROM t VERSION AS OF ’tag-name’
> >>>>>
> >>>>> to travel to a tag.
> >>>>>
> >>>>> ## Tag class
> >>>>> I agree with you that we can reuse the Snapshot class. We can introduce
> >>>>> `TagManager`
> >>>>> only to manage tags.
> >>>>>
> >>>>> ## Expiring Snapshot
> >>>>>> why not record it in ManifestEntry?
> >>>>> This is because every time Paimon generate a snapshot, it will create 
> >>>>> new
> >>>>> ManifestEntries
> >>>>> for data files. Consider this scenario, if we record it in 
> >>>>> ManifestEntry,
> >>>>> assuming     we commit
> >>>>> data file A to snapshot #1, we will get manifest entry Entry#1 as [ADD,
> >>>>> A, commit at #1].
> >>>>> Then we commit -A to snapshot #2, we will get manifest entry Entry#2 as
> >>>>> [DELETE, A, ?],
> >>>>> as you can see, we cannot know at which snapshot we commit the file A. 
> >>>>> So
> >>>>> we have to
> >>>>> record this information to data file meta directly.
> >>>>>
> >>>>>> We should note that "record it in `DataFileMeta` should be done before
> >>>>> “tag”
> >>>>> and document version compatibility.
> >>>>>
> >>>>> I will add message for this.
> >>>>>
> >>>>> Best,
> >>>>> Yu Zelin
> >>>>>
> >>>>>
> >>>>>> 2023年5月29日 10:29,Jingsong Li <[email protected]> 写道:
> >>>>>>
> >>>>>> Thanks Zelin for the update.
> >>>>>>
> >>>>>> ## TAG ID
> >>>>>>
> >>>>>> Is this useful? We have tag-name, snapshot-id, and now introducing a
> >>>>>> tag id? What is used?
> >>>>>>
> >>>>>> ## Time Travel
> >>>>>>
> >>>>>> SELECT * FROM t VERSION AS OF tag-name.<name>
> >>>>>>
> >>>>>> This does not look like sql standard.
> >>>>>>
> >>>>>> Why do we introduce this `tag-name` prefix?
> >>>>>>
> >>>>>> ## Tag class
> >>>>>>
> >>>>>> Why not just use the Snapshot class? It looks like we don't need to
> >>>>>> introduce Tag class. We can just copy the snapshot file to tag/.
> >>>>>>
> >>>>>> ## Expiring Snapshot
> >>>>>>
> >>>>>> We should note that "record it in `DataFileMeta`" should be done
> >>>>>> before "tag". And document version compatibility.
> >>>>>> And why not record it in ManifestEntry?
> >>>>>>
> >>>>>> Best,
> >>>>>> Jingsong
> >>>>>>
> >>>>>> On Fri, May 26, 2023 at 11:15 AM yu zelin <[email protected]> 
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Hi, all,
> >>>>>>>
> >>>>>>> FYI, I have updated the PIP [1].
> >>>>>>>
> >>>>>>> Main changes:
> >>>>>>> - Use new name `tag`
> >>>>>>> - Enrich Motivation
> >>>>>>> - New Section `Data Files Handling` to describe how to determine a 
> >>>>>>> data
> >>>>> files can be deleted.
> >>>>>>>
> >>>>>>> Best,
> >>>>>>> Yu Zelin
> >>>>>>>
> >>>>>>> [1] https://cwiki.apache.org/confluence/x/NxE0Dw
> >>>>>>>
> >>>>>>>> 2023年5月24日 17:18,yu zelin <[email protected]> 写道:
> >>>>>>>>
> >>>>>>>> Hi, Guojun,
> >>>>>>>>
> >>>>>>>> I’d like to share my thoughts about your questions.
> >>>>>>>>
> >>>>>>>> 1. Expiration of savepoint
> >>>>>>>> In my opinion, savepoints are created in a long interval, so there
> >>>>> will not exist too many of them.
> >>>>>>>> If users create a savepoint per day, there are 365 savepoints a year.
> >>>>> So I didn’t consider expiration
> >>>>>>>> of it, and I think provide a flink action like `delete-savepoint id =
> >>>>> 1` is enough now.
> >>>>>>>> But if it is really important, we can introduce table options to do
> >>>>> so. I think we can do it like expiring
> >>>>>>>> snapshots.
> >>>>>>>>
> >>>>>>>> 2. >   id of compacted snapshot picked by the savepoint
> >>>>>>>> My initial idea is picking a compacted snapshot or doing compaction
> >>>>> before creating savepoint. But
> >>>>>>>> After discuss with Jingsong, I found it’s difficult. So now I suppose
> >>>>> to directly create savepoint from
> >>>>>>>> the given snapshot. Maybe we can optimize it later.
> >>>>>>>> The changes will be updated soon.
> >>>>>>>>> manifest file list in system-table
> >>>>>>>> I think manifest file is not very important for users. Users can find
> >>>>> when a savepoint is created, and
> >>>>>>>> get the savepoint id, then they can query it from the savepoint by 
> >>>>>>>> the
> >>>>> id. I did’t see what scenario
> >>>>>>>> the users need the manifest file information. What do you think?
> >>>>>>>>
> >>>>>>>> Best,
> >>>>>>>> Yu Zelin
> >>>>>>>>
> >>>>>>>>> 2023年5月24日 10:50,Guojun Li <[email protected]> 写道:
> >>>>>>>>>
> >>>>>>>>> Thanks zelin for bringing up the discussion. I'm thinking about:
> >>>>>>>>> 1. How to manage the savepoints if there are no expiration 
> >>>>>>>>> mechanism,
> >>>>> by
> >>>>>>>>> the TTL management of storages or external script?
> >>>>>>>>> 2. I think the id of compacted snapshot picked by the savepoint and
> >>>>>>>>> manifest file list is also important information for users, could
> >>>>> these
> >>>>>>>>> information be stored in the system-table?
> >>>>>>>>>
> >>>>>>>>> Best,
> >>>>>>>>> Guojun
> >>>>>>>>>
> >>>>>>>>> On Mon, May 22, 2023 at 9:13 PM Jingsong Li <[email protected]>
> >>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> FYI
> >>>>>>>>>>
> >>>>>>>>>> The PIP lacks a table to show Discussion thread & Vote thread &
> >>>>> ISSUE...
> >>>>>>>>>>
> >>>>>>>>>> Best
> >>>>>>>>>> Jingsong
> >>>>>>>>>>
> >>>>>>>>>> On Mon, May 22, 2023 at 4:48 PM yu zelin <[email protected]>
> >>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>> Hi, all,
> >>>>>>>>>>>
> >>>>>>>>>>> Thank all of you for your suggestions and questions. After reading
> >>>>> your
> >>>>>>>>>> suggestions, I adopt some of them and I want to share my opinions
> >>>>> here.
> >>>>>>>>>>>
> >>>>>>>>>>> To make my statements more clear, I will still use the word
> >>>>> `savepoint`.
> >>>>>>>>>> When we make a consensus, the name may be changed.
> >>>>>>>>>>>
> >>>>>>>>>>> 1. The purposes of savepoint
> >>>>>>>>>>>
> >>>>>>>>>>> As Shammon mentioned, Flink and database also have the concept of
> >>>>>>>>>> `savepoint`. So it’s better to clarify the purposes of our 
> >>>>>>>>>> savepoint.
> >>>>>>>>>> Thanks for Nicholas and Jingsong, I think your explanations are 
> >>>>>>>>>> very
> >>>>> clear.
> >>>>>>>>>> I’d like to give my summary:
> >>>>>>>>>>>
> >>>>>>>>>>> (1) Fault recovery (or we can say disaster recovery). Users can 
> >>>>>>>>>>> ROLL
> >>>>>>>>>> BACK to a savepoint if needed. If user rollbacks to a savepoint, 
> >>>>>>>>>> the
> >>>>> table
> >>>>>>>>>> will hold the data in the savepoint and the data committed  after 
> >>>>>>>>>> the
> >>>>>>>>>> savepoint will be deleted. In this scenario we need savepoint 
> >>>>>>>>>> because
> >>>>>>>>>> snapshots may have expired, the savepoint can keep longer and save
> >>>>> user’s
> >>>>>>>>>> old data.
> >>>>>>>>>>>
> >>>>>>>>>>> (2) Record versions of data at a longer interval (typically daily
> >>>>> level
> >>>>>>>>>> or weekly level). With savepoint, user can query the old data in
> >>>>> batch
> >>>>>>>>>> mode. Comparing to copy records to a new table or merge incremental
> >>>>> records
> >>>>>>>>>> with old records (like using merge into in Hive), the savepoint is
> >>>>> more
> >>>>>>>>>> lightweight because we don’t copy data files, we just record the
> >>>>> meta data
> >>>>>>>>>> of them.
> >>>>>>>>>>>
> >>>>>>>>>>> As you can see, savepoint is very similar to snapshot. The
> >>>>> differences
> >>>>>>>>>> are:
> >>>>>>>>>>>
> >>>>>>>>>>> (1) Savepoint lives longer. In most cases, snapshot’s life time is
> >>>>>>>>>> about several minutes to hours. We suppose the savepoint can live
> >>>>> several
> >>>>>>>>>> days, weeks, or even months.
> >>>>>>>>>>>
> >>>>>>>>>>> (2) Savepoint is mainly used for batch reading for historical 
> >>>>>>>>>>> data.
> >>>>> In
> >>>>>>>>>> this PIP, we don’t introduce streaming reading for savepoint.
> >>>>>>>>>>>
> >>>>>>>>>>> 2. Candidates of name
> >>>>>>>>>>>
> >>>>>>>>>>> I agree with Jingsong that we can use a new name. Since the 
> >>>>>>>>>>> purpose
> >>>>> and
> >>>>>>>>>> mechanism (savepoint is very similar to snapshot) of savepoint is
> >>>>> similar
> >>>>>>>>>> to `tag` in iceberg, maybe we can use `tag`.
> >>>>>>>>>>>
> >>>>>>>>>>> In my opinion, an alternative is `anchor`. All the snapshots are
> >>>>> like
> >>>>>>>>>> the navigation path of the streaming data, and an `anchor` can stop
> >>>>> it in a
> >>>>>>>>>> place.
> >>>>>>>>>>>
> >>>>>>>>>>> 3. Public table operations and options
> >>>>>>>>>>>
> >>>>>>>>>>> We supposed to expose some operations and table options for user 
> >>>>>>>>>>> to
> >>>>>>>>>> manage the savepoint.
> >>>>>>>>>>>
> >>>>>>>>>>> (1) Operations (Currently for Flink)
> >>>>>>>>>>> We provide flink actions to manage savepoints:
> >>>>>>>>>>> create-savepoint: To generate a savepoint from latest snapshot.
> >>>>>>>>>> Support to create from specified snapshot.
> >>>>>>>>>>> delete-savepoint: To delete specified savepoint.
> >>>>>>>>>>> rollback-to: To roll back to a specified savepoint.
> >>>>>>>>>>>
> >>>>>>>>>>> (2) Table options
> >>>>>>>>>>> We suppose to provide options for creating savepoint periodically:
> >>>>>>>>>>> savepoint.create-time: When to create the savepoint. Example: 
> >>>>>>>>>>> 00:00
> >>>>>>>>>>> savepoint.create-interval: Interval between the creation of two
> >>>>>>>>>> savepoints. Examples: 2 d.
> >>>>>>>>>>> savepoint.time-retained: The maximum time of savepoints to retain.
> >>>>>>>>>>>
> >>>>>>>>>>> (3) Procedures (future work)
> >>>>>>>>>>> Spark supports SQL extension. After we support Spark CALL
> >>>>> statement, we
> >>>>>>>>>> can provide procedures to create, delete or rollback to savepoint
> >>>>> for Spark
> >>>>>>>>>> users.
> >>>>>>>>>>>
> >>>>>>>>>>> Support of CALL is on the road map of Flink. In future version, we
> >>>>> can
> >>>>>>>>>> also support savepoint-related procedures for Flink users.
> >>>>>>>>>>>
> >>>>>>>>>>> 4. Expiration of data files
> >>>>>>>>>>>
> >>>>>>>>>>> Currently, when a snapshot is expired, data files that not be used
> >>>>> by
> >>>>>>>>>> other snapshots. After we introduce the savepoint, we must make 
> >>>>>>>>>> sure
> >>>>> the
> >>>>>>>>>> data files saved by savepoint will not be deleted.
> >>>>>>>>>>>
> >>>>>>>>>>> Conversely,  when a savepoint is deleted, the data files that not 
> >>>>>>>>>>> be
> >>>>>>>>>> used by existing snapshots and other savepoints will be deleted.
> >>>>>>>>>>>
> >>>>>>>>>>> I have wrote some POC codes to implement it. I will update the
> >>>>> mechanism
> >>>>>>>>>> in PIP soon.
> >>>>>>>>>>>
> >>>>>>>>>>> Best,
> >>>>>>>>>>> Yu Zelin
> >>>>>>>>>>>
> >>>>>>>>>>>> 2023年5月21日 20:54,Jingsong Li <[email protected]> 写道:
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks Yun for your information.
> >>>>>>>>>>>>
> >>>>>>>>>>>> We need to be careful to avoid confusion between Paimon and Flink
> >>>>>>>>>>>> concepts about "savepoint"
> >>>>>>>>>>>>
> >>>>>>>>>>>> Maybe we don't have to insist on using this "savepoint", for
> >>>>> example,
> >>>>>>>>>>>> TAG is also a candidate just like Iceberg [1]
> >>>>>>>>>>>>
> >>>>>>>>>>>> [1] https://iceberg.apache.org/docs/latest/branching/
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Jingsong
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Sun, May 21, 2023 at 8:51 PM Jingsong Li <
> >>>>> [email protected]>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Thanks Nicholas for your detailed requirements.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> We need to supplement user requirements in FLIP, which is mainly
> >>>>> aimed
> >>>>>>>>>>>>> at two purposes:
> >>>>>>>>>>>>> 1. Fault recovery for data errors (named: restore or 
> >>>>>>>>>>>>> rollback-to)
> >>>>>>>>>>>>> 2. Used to record versions at the day level (such as), targeting
> >>>>>>>>>> batch queries
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Best,
> >>>>>>>>>>>>> Jingsong
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Sat, May 20, 2023 at 2:55 PM Yun Tang <[email protected]>
> >>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Guys,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Since we use Paimon with Flink in most cases, I think we need 
> >>>>>>>>>>>>>> to
> >>>>>>>>>> identify the same word "savepoint" in different systems.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> For Flink, savepoint means:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> 1.  Triggered by users, not periodically triggered by the 
> >>>>>>>>>>>>>> system
> >>>>>>>>>> itself. However, this FLIP wants to support it created 
> >>>>>>>>>> periodically.
> >>>>>>>>>>>>>> 2.  Even the so-called incremental native savepoint [1], it 
> >>>>>>>>>>>>>> will
> >>>>>>>>>> not depend on the previous checkpoints or savepoints, it will still
> >>>>> copy
> >>>>>>>>>> files on DFS to the self-contained savepoint folder. However, from
> >>>>> the
> >>>>>>>>>> description of this FLIP about the deletion of expired snapshot
> >>>>> files,
> >>>>>>>>>> paimion savepoint will refer to the previously existing files
> >>>>> directly.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I don't think we need to make the semantics of Paimon totally 
> >>>>>>>>>>>>>> the
> >>>>>>>>>> same as Flink's. However, we need to introduce a table to tell the
> >>>>>>>>>> difference compared with Flink and discuss about the difference.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> [1]
> >>>>>>>>>>
> >>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-203%3A+Incremental+savepoints#FLIP203:Incrementalsavepoints-Semantic
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Best
> >>>>>>>>>>>>>> Yun Tang
> >>>>>>>>>>>>>> ________________________________
> >>>>>>>>>>>>>> From: Nicholas Jiang <[email protected]>
> >>>>>>>>>>>>>> Sent: Friday, May 19, 2023 17:40
> >>>>>>>>>>>>>> To: [email protected] <[email protected]>
> >>>>>>>>>>>>>> Subject: Re: [DISCUSS] PIP-4 Support savepoint
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Guys,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks Zelin for driving the savepoint proposal. I propose some
> >>>>>>>>>> opinions for savepont:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> -- About "introduce savepoint for Paimon to persist full data 
> >>>>>>>>>>>>>> in
> >>>>> a
> >>>>>>>>>> time point"
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> The motivation of savepoint proposal is more like snapshot TTL
> >>>>>>>>>> management. Actually, disaster recovery is very much mission
> >>>>> critical for
> >>>>>>>>>> any software. Especially when it comes to data systems, the impact
> >>>>> could be
> >>>>>>>>>> very serious leading to delay in business decisions or even wrong
> >>>>> business
> >>>>>>>>>> decisions at times. Savepoint is proposed to assist users in
> >>>>> recovering
> >>>>>>>>>> data from a previous state: "savepoint" and "restore".
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> "savepoint" saves the Paimon table as of the commit time,
> >>>>> therefore
> >>>>>>>>>> if there is a savepoint, the data generated in the corresponding
> >>>>> commit
> >>>>>>>>>> could not be clean. Meanwhile, savepoint could let user restore the
> >>>>> table
> >>>>>>>>>> to this savepoint at a later point in time if need be. On similar
> >>>>> lines,
> >>>>>>>>>> savepoint cannot be triggered on a commit that is already cleaned 
> >>>>>>>>>> up.
> >>>>>>>>>> Savepoint is synonymous to taking a backup, just that we don't make
> >>>>> a new
> >>>>>>>>>> copy of the table, but just save the state of the table elegantly 
> >>>>>>>>>> so
> >>>>> that
> >>>>>>>>>> we can restore it later when in need.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> "restore" lets you restore your table to one of the savepoint
> >>>>>>>>>> commit. Meanwhile, it cannot be undone (or reversed) and so care
> >>>>> should be
> >>>>>>>>>> taken before doing a restore. At this time, Paimon would delete all
> >>>>> data
> >>>>>>>>>> files and commit files (timeline files) greater than the savepoint
> >>>>> commit
> >>>>>>>>>> to which the table is being restored.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> BTW, it's better to introduce snapshot view based on savepoint,
> >>>>>>>>>> which could improve query performance of historical data for Paimon
> >>>>> table.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> -- About Public API of savepont
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Current introduced savepoint interfaces in Public API are not
> >>>>> enough
> >>>>>>>>>> for users, for example, deleteSavepoint, restoreSavepoint etc.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> -- About "Paimon's savepoint need to be combined with Flink's
> >>>>>>>>>> savepoint":
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> If paimon supports savepoint mechanism and provides savepoint
> >>>>>>>>>> interfaces, the integration with Flink's savepoint is not blocked
> >>>>> for this
> >>>>>>>>>> proposal.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> In summary, savepoint is not only used to improve the query
> >>>>>>>>>> performance of historical data, but also used for disaster recovery
> >>>>>>>>>> processing.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 2023/05/17 09:53:11 Jingsong Li wrote:
> >>>>>>>>>>>>>>> What Shammon mentioned is interesting. I agree with what he 
> >>>>>>>>>>>>>>> said
> >>>>>>>>>> about
> >>>>>>>>>>>>>>> the differences in savepoints between databases and stream
> >>>>>>>>>> computing.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> About "Paimon's savepoint need to be combined with Flink's
> >>>>>>>>>> savepoint":
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I think it is possible, but we may need to deal with this in
> >>>>> another
> >>>>>>>>>>>>>>> mechanism, because the snapshots after savepoint may expire. 
> >>>>>>>>>>>>>>> We
> >>>>> need
> >>>>>>>>>>>>>>> to compare data between two savepoints to generate incremental
> >>>>> data
> >>>>>>>>>>>>>>> for streaming read.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> But this may not need to block FLIP, it looks like the current
> >>>>>>>>>> design
> >>>>>>>>>>>>>>> does not break the future combination?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>> Jingsong
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Wed, May 17, 2023 at 5:33 PM Shammon FY <[email protected]>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Hi Caizhi,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks for your comments. As you mentioned, I think we may
> >>>>> need to
> >>>>>>>>>> discuss
> >>>>>>>>>>>>>>>> the role of savepoint in Paimon.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> If I understand correctly, the main feature of savepoint in 
> >>>>>>>>>>>>>>>> the
> >>>>>>>>>> current PIP
> >>>>>>>>>>>>>>>> is that the savepoint will not be expired, and users can
> >>>>> perform a
> >>>>>>>>>> query on
> >>>>>>>>>>>>>>>> the savepoint according to time-travel. Besides that, there 
> >>>>>>>>>>>>>>>> is
> >>>>>>>>>> savepoint in
> >>>>>>>>>>>>>>>> the database and Flink.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 1. Savepoint in database. The database can roll back table
> >>>>> data to
> >>>>>>>>>> the
> >>>>>>>>>>>>>>>> specified 'version' based on savepoint. So the key point of
> >>>>>>>>>> savepoint in
> >>>>>>>>>>>>>>>> the database is to rollback data.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 2. Savepoint in Flink. Users can trigger a savepoint with a
> >>>>>>>>>> specific
> >>>>>>>>>>>>>>>> 'path', and save all data of state to the savepoint for job.
> >>>>> Then
> >>>>>>>>>> users can
> >>>>>>>>>>>>>>>> create a new job based on the savepoint to continue consuming
> >>>>>>>>>> incremental
> >>>>>>>>>>>>>>>> data. I think the core capabilities are: backup for a job, 
> >>>>>>>>>>>>>>>> and
> >>>>>>>>>> resume a job
> >>>>>>>>>>>>>>>> based on the savepoint.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> In addition to the above, Paimon may also face data write
> >>>>>>>>>> corruption and
> >>>>>>>>>>>>>>>> need to recover data based on the specified savepoint. So we
> >>>>> may
> >>>>>>>>>> need to
> >>>>>>>>>>>>>>>> consider what abilities should Paimon savepoint need besides
> >>>>> the
> >>>>>>>>>> ones
> >>>>>>>>>>>>>>>> mentioned in the current PIP?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Additionally, as mentioned above, Flink also has
> >>>>>>>>>>>>>>>> savepoint mechanism. During the process of streaming data 
> >>>>>>>>>>>>>>>> from
> >>>>>>>>>> Flink to
> >>>>>>>>>>>>>>>> Paimon, does Paimon's savepoint need to be combined with
> >>>>> Flink's
> >>>>>>>>>> savepoint?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>> Shammon FY
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On Wed, May 17, 2023 at 4:02 PM Caizhi Weng <
> >>>>> [email protected]>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Hi developers!
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Thanks Zelin for bringing up the discussion. The proposal
> >>>>> seems
> >>>>>>>>>> good to me
> >>>>>>>>>>>>>>>>> overall. However I'd also like to bring up a few options.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 1. As Jingsong mentioned, Savepoint class should not become 
> >>>>>>>>>>>>>>>>> a
> >>>>>>>>>> public API,
> >>>>>>>>>>>>>>>>> at least for now. What we need to discuss for the public API
> >>>>> is
> >>>>>>>>>> how the
> >>>>>>>>>>>>>>>>> users can create or delete savepoints. For example, what the
> >>>>>>>>>> table option
> >>>>>>>>>>>>>>>>> looks like, what commands and options are provided for the
> >>>>> Flink
> >>>>>>>>>> action,
> >>>>>>>>>>>>>>>>> etc.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 2. Currently most Flink actions are related to streaming
> >>>>>>>>>> processing, so
> >>>>>>>>>>>>>>>>> only Flink can support them. However, savepoint creation and
> >>>>>>>>>> deletion seems
> >>>>>>>>>>>>>>>>> like a feature for batch processing. So aside from Flink
> >>>>> actions,
> >>>>>>>>>> shall we
> >>>>>>>>>>>>>>>>> also provide something like Spark actions for savepoints?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I would also like to comment on Shammon's views.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Should we introduce an option for savepoint path which may 
> >>>>>>>>>>>>>>>>> be
> >>>>>>>>>> different
> >>>>>>>>>>>>>>>>>> from 'warehouse'? Then users can backup the data of
> >>>>> savepoint.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I don't see this is necessary. To backup a table the user 
> >>>>>>>>>>>>>>>>> just
> >>>>>>>>>> need to copy
> >>>>>>>>>>>>>>>>> all files from the table directory. Savepoint in Paimon, as
> >>>>> far
> >>>>>>>>>> as I
> >>>>>>>>>>>>>>>>> understand, is mainly for users to review historical data, 
> >>>>>>>>>>>>>>>>> not
> >>>>>>>>>> for backing
> >>>>>>>>>>>>>>>>> up tables.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Will the savepoint copy data files from snapshot or only 
> >>>>>>>>>>>>>>>>> save
> >>>>>>>>>> meta files?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> It would be a heavy burden if a savepoint copies all its
> >>>>> files.
> >>>>>>>>>> As I
> >>>>>>>>>>>>>>>>> mentioned above, savepoint is not for backing up tables.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> How can users create a new table and restore data from the
> >>>>>>>>>> specified
> >>>>>>>>>>>>>>>>>> savepoint?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> This reminds me of savepoints in Flink. Still, savepoint is
> >>>>> not
> >>>>>>>>>> for backing
> >>>>>>>>>>>>>>>>> up tables so I guess we don't need to support "restoring 
> >>>>>>>>>>>>>>>>> data"
> >>>>>>>>>> from a
> >>>>>>>>>>>>>>>>> savepoint.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Shammon FY <[email protected]> 于2023年5月17日周三 10:32写道:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks Zelin for initiating this discussion. I have some
> >>>>>>>>>> comments:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> 1. Should we introduce an option for savepoint path which
> >>>>> may be
> >>>>>>>>>>>>>>>>> different
> >>>>>>>>>>>>>>>>>> from 'warehouse'? Then users can backup the data of
> >>>>> savepoint.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> 2. Will the savepoint copy data files from snapshot or only
> >>>>> save
> >>>>>>>>>> meta
> >>>>>>>>>>>>>>>>>> files? The description in the PIP "After we introduce
> >>>>> savepoint,
> >>>>>>>>>> we
> >>>>>>>>>>>>>>>>> should
> >>>>>>>>>>>>>>>>>> also check if the data files are used by savepoints." looks
> >>>>> like
> >>>>>>>>>> we only
> >>>>>>>>>>>>>>>>>> save meta files for savepoint.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> 3. How can users create a new table and restore data from 
> >>>>>>>>>>>>>>>>>> the
> >>>>>>>>>> specified
> >>>>>>>>>>>>>>>>>> savepoint?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>>> Shammon FY
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On Wed, May 17, 2023 at 10:19 AM Jingsong Li <
> >>>>>>>>>> [email protected]>
> >>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Thanks Zelin for driving.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Some comments:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 1. I think it's possible to advance `Proposed Changes` to
> >>>>> the
> >>>>>>>>>> top,
> >>>>>>>>>>>>>>>>>>> Public API has no meaning if I don't know how to do it.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 2. Public API, Savepoint and SavepointManager are not 
> >>>>>>>>>>>>>>>>>>> Public
> >>>>>>>>>> API, only
> >>>>>>>>>>>>>>>>>>> Flink action or configuration option should be public API.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 3.Maybe we can have a separate chapter to describe
> >>>>>>>>>>>>>>>>>>> `savepoint.create-interval`, maybe 'Periodically
> >>>>> savepoint'? It
> >>>>>>>>>> is not
> >>>>>>>>>>>>>>>>>>> just an interval, because the true user case is savepoint
> >>>>> after
> >>>>>>>>>> 0:00.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 4.About 'Interaction with Snapshot', to be continued ...
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>>>> Jingsong
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On Tue, May 16, 2023 at 7:07 PM yu zelin <
> >>>>> [email protected]
> >>>>>>>>>>>
> >>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Hi, Paimon Devs,
> >>>>>>>>>>>>>>>>>>>> I’d like to start a discussion about PIP-4[1]. In this
> >>>>>>>>>> PIP, I
> >>>>>>>>>>>>>>>>> want
> >>>>>>>>>>>>>>>>>>> to talk about why we need savepoint, and some thoughts 
> >>>>>>>>>>>>>>>>>>> about
> >>>>>>>>>> managing
> >>>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>> using savepoint. Look forward to your question and
> >>>>> suggestions.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>>>>> Yu Zelin
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> [1] https://cwiki.apache.org/confluence/x/NxE0Dw
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>
> >
>

Reply via email to