+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 > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>> > >>>>> > >>> > > >
