Hi, All. I write a simple demo to illustrate my idea. Hope this helps.
Best, Shengkai https://github.com/apache/flink/compare/master...fsk119:flink:example?expand=1 Gabor Somogyi <gabor.g.somo...@gmail.com> 于2025年3月26日周三 15:54写道: > > I'm fine with a seperate SQL connector for metadata, so maybe we could > update the FLIP about our discussion? > > Sorry, I've forgotten this part. Yeah, no matter we choose I'm going to > update the FLIP. > > G > > > On Wed, Mar 26, 2025 at 8:51 AM Gabor Somogyi <gabor.g.somo...@gmail.com> > wrote: > > > Hi All, > > > > I've also lack of the knowledge of PTF so I've read just the motivation > > part: > > > > "The SQL 2016 standard introduced a way of defining custom SQL operators > > defined by ISO/IEC 19075-7:2021 (Part 7: Polymorphic table functions). > > ~200 pages define how this new kind of function can consume and produce > > tables with various execution properties. > > Unfortunately, this part of the standard is not publicly available." > > > > Of course we can take a look at some examples but do we really want to > > expose state data with this construct > > which is described in ~200 pages and part of the standard is not publicly > > available? 🙂 > > I mean the dataset is couple of rows and the use-case is join with > another > > table like with state data. > > If somebody can give advantages I would buy that but from my limited > > understanding this would be an overkill here. > > > > BR, > > G > > > > > > On Wed, Mar 26, 2025 at 8:28 AM Gyula Fóra <gyula.f...@gmail.com> wrote: > > > >> Hi Zakelly , Shengkai! > >> > >> I don't know too much about PTFs, it would be interesting to see how the > >> usage would look in practice. > >> > >> Do you have some mockup/example in mind how the PTF would look for > example > >> when want to: > >> - Simply display/aggregate whats in the metadata > >> - Join keyed state with some metadata columns > >> > >> Thanks > >> Gyula > >> > >> On Wed, Mar 26, 2025 at 7:33 AM Zakelly Lan <zakelly....@gmail.com> > >> wrote: > >> > >> > Hi everyone, > >> > > >> > I'm fine with a seperate SQL connector for metadata, so maybe we could > >> > update the FLIP about our discussion? And Shengkai provides a PTF > >> > implementation, does that also meet the requirement? > >> > > >> > > >> > Best, > >> > Zakelly > >> > > >> > On Thu, Mar 20, 2025 at 4:47 PM Gabor Somogyi < > >> gabor.g.somo...@gmail.com> > >> > wrote: > >> > > >> > > Hi All, > >> > > > >> > > @Zakelly: Gyula summarised it correctly what I meant so please treat > >> the > >> > > content as mine. > >> > > As an addition I'm not against to add CLI at all, I'm just stating > >> that > >> > in > >> > > some cases like this, users would like to have > >> > > a self-serving solution where they can provide SQL statements which > >> can > >> > > trigger alerts automatically. > >> > > > >> > > My personal opinion is that CLI would be beneficial for several > >> cases. A > >> > > good example is when users want to restart job > >> > > from specific Kafka offsets which are persisted in a savepoint. For > >> such > >> > > scenario users are more than happy since they > >> > > expect manual intervention with full control. So all in all one can > >> count > >> > > on my +1 when CLI FLIP would come up... > >> > > > >> > > BR, > >> > > G > >> > > > >> > > > >> > > On Thu, Mar 20, 2025 at 8:20 AM Gyula Fóra <gyula.f...@gmail.com> > >> wrote: > >> > > > >> > >> Hi! > >> > >> > >> > >> @Zakelly Lan <zakelly....@gmail.com> > >> > >> I think what Gabor means is that users want to have predefined SQL > >> > scripts > >> > >> to perform state analysis tasks to debug/identify problems. > >> > >> Such as write a SQL script that joins the metadata table with the > >> state > >> > >> and > >> > >> do some analytics on it. > >> > >> > >> > >> If we have a meta table then the SQL script that can do this is > fixed > >> > and > >> > >> users can trigger this on demand by simply providing a new > savepoint > >> > path. > >> > >> > >> > >> If we have a different mechanism to extract metadata that is not > SQL > >> > >> native > >> > >> then manual steps need to be executed and a custom SQL script would > >> need > >> > >> to > >> > >> be written that adds the manually extracted metadata into the > script. > >> > >> > >> > >> Cheers, > >> > >> Gyula > >> > >> > >> > >> On Thu, Mar 20, 2025 at 4:32 AM Zakelly Lan <zakelly....@gmail.com > > > >> > >> wrote: > >> > >> > >> > >> > Hi all, > >> > >> > > >> > >> > Thanks for your answers! Getting everyone aligned on this topic > is > >> > >> > challenging, but it’s definitely worth the effort since it will > >> help > >> > >> > streamline things moving forward. > >> > >> > > >> > >> > @Gabor are you saying that users are using some scripts to define > >> the > >> > >> SQL > >> > >> > metadata connector and get the information, right? If so, would a > >> CLI > >> > >> tool > >> > >> > be more convenient? It's easy to invoke and can get the result > >> > swiftly. > >> > >> And > >> > >> > there should be some other systems to track the checkpoint > lineage > >> and > >> > >> > analyze if there are outliers in metadata (e.g. state size of one > >> > >> operator) > >> > >> > right? Well, maybe I missed something so please correct me if I'm > >> > wrong. > >> > >> > > >> > >> > I think the overall vision in Flink SQL is to provide a SQL > native > >> > >> > > environment where we can serve complex use-cases like you would > >> > expect > >> > >> > in a > >> > >> > > regular database. > >> > >> > > >> > >> > > >> > >> > @Gyula Well, this is a good point. From the perspective of > >> > comprehensive > >> > >> > SQL experience, I'd +1 for treating metadata as data. Although I > >> doubt > >> > >> if > >> > >> > there is a need for processing metadata, I won't be against a > >> separate > >> > >> > connector. > >> > >> > > >> > >> > Regarding the CLI tool, I still think it’s worth implementing. > >> Such a > >> > >> tool > >> > >> > could provide savepoint information before resuming from a > >> savepoint, > >> > >> which > >> > >> > would enhance the user experience in CLI-based workflows. It > would > >> be > >> > >> good > >> > >> > if someone could implement this feature. We shouldn’t worry about > >> > >> whether > >> > >> > this tool might be retired in the future. Regardless of the > >> SQL-based > >> > >> > solution we eventually adopt, this capability will remain > essential > >> > for > >> > >> CLI > >> > >> > users. This is another topic. > >> > >> > > >> > >> > > >> > >> > Best, > >> > >> > Zakelly > >> > >> > > >> > >> > > >> > >> > On Thu, Mar 20, 2025 at 10:37 AM Shengkai Fang < > fskm...@gmail.com> > >> > >> wrote: > >> > >> > > >> > >> > > Hi. > >> > >> > > > >> > >> > > After reading the doc[1], I think Spark provides a function for > >> > users > >> > >> to > >> > >> > > consume the metadata from the savepoint. In Flink SQL, similar > >> > >> > > functionality is implemented through Polymorphic Table > Functions > >> > >> (PTF) as > >> > >> > > proposed in FLIP-440[2]. Below is a code example[3] > illustrating > >> > this > >> > >> > > concept: > >> > >> > > > >> > >> > > ``` > >> > >> > > public static class ScalarArgsFunction extends > >> > >> > > TestProcessTableFunctionBase { > >> > >> > > public void eval(Integer i, Boolean b) { > >> > >> > > collectObjects(i, b); > >> > >> > > } > >> > >> > > } > >> > >> > > ``` > >> > >> > > > >> > >> > > ``` > >> > >> > > INSERT INTO sink SELECT * FROM f(i => 42, b => CAST('TRUE' AS > >> > >> BOOLEAN)) > >> > >> > > `` > >> > >> > > > >> > >> > > So we can add a builtin function named `read_state_metadata` to > >> read > >> > >> > > savepoint data. > >> > >> > > > >> > >> > > Best, > >> > >> > > Shengkai > >> > >> > > > >> > >> > > [1] > >> > >> > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://docs.databricks.com/aws/en/structured-streaming/read-state?language=SQL > >> > >> > > [2] > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=298781093 > >> > >> > > [3] > >> > >> > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/nodes/exec/stream/ProcessTableFunctionTestPrograms.java#L140 > >> > >> > > > >> > >> > > Gyula Fóra <gyula.f...@gmail.com> 于2025年3月19日周三 18:37写道: > >> > >> > > > >> > >> > > > Hi All! > >> > >> > > > > >> > >> > > > Thank you for the answers and concerns from everyone. > >> > >> > > > > >> > >> > > > On the CLI vs State Metadata Connector/Table question I would > >> also > >> > >> like > >> > >> > > to > >> > >> > > > step back a little and look at the bigger picture. > >> > >> > > > > >> > >> > > > I think the overall vision in Flink SQL is to provide a SQL > >> native > >> > >> > > > environment where we can serve complex use-cases like you > would > >> > >> expect > >> > >> > > in a > >> > >> > > > regular database. > >> > >> > > > Most features, developments in the recent years have gone > this > >> > way. > >> > >> > > > > >> > >> > > > The State Metadata Table would be a natural and > straightforward > >> > fit > >> > >> > here. > >> > >> > > > So from my side, +1 for that. > >> > >> > > > > >> > >> > > > However I could understand if we are not ready to add a new > >> > >> > > > connector/format due to maintenance concerns (and in general > >> > concern > >> > >> > > about > >> > >> > > > the design). > >> > >> > > > If that's the issue then we should spend more time on the > >> design > >> > to > >> > >> get > >> > >> > > > comfortable with the approach and seek feedback from the > wider > >> > >> > community > >> > >> > > > > >> > >> > > > I am -1 for the CLI/tooling approach as that will not provide > >> the > >> > >> > > > featureset we are looking for that is not already covered by > >> the > >> > >> Java > >> > >> > > > connector. And that approach would come with the same > >> maintenance > >> > >> > > > implications. > >> > >> > > > > >> > >> > > > Cheers > >> > >> > > > Gyula > >> > >> > > > > >> > >> > > > > >> > >> > > > On Wed, Mar 19, 2025 at 11:24 AM Gabor Somogyi < > >> > >> > > gabor.g.somo...@gmail.com> > >> > >> > > > wrote: > >> > >> > > > > >> > >> > > > > Hi Zaklely, Shengkai > >> > >> > > > > > >> > >> > > > > Several topics are going on so adding gist answers to them. > >> When > >> > >> some > >> > >> > > > topic > >> > >> > > > > is not touched please highlight it. > >> > >> > > > > > >> > >> > > > > @Shengkai: I've read through all the previous FLIPs related > >> > >> catalogs > >> > >> > > and > >> > >> > > > if > >> > >> > > > > we would like to keep the concepts there > >> > >> > > > > then one-to-one mapping relationship between savepoint and > >> > catalog > >> > >> > is a > >> > >> > > > > reasonable direction. In short I'm happy that > >> > >> > > > > you've highlighted this and agree as a whole. I've written > it > >> > down > >> > >> > > > > previously, just want to double confirm that state catalog > is > >> > >> > > > > essential and planned. When we reach this point then your > >> input > >> > is > >> > >> > more > >> > >> > > > > than welcome. > >> > >> > > > > > >> > >> > > > > @Zakelly: We've tried the CLI and separate library > approaches > >> > with > >> > >> > > users > >> > >> > > > > already and these are not something which is welcome > because > >> of > >> > >> the > >> > >> > > > > following: > >> > >> > > > > * Users want to have automated tasks and not manual > >> CLI/library > >> > >> > output > >> > >> > > > > parsing. This can be hacked around but our experience is > >> > negative > >> > >> on > >> > >> > > this > >> > >> > > > > because it's just brittle. > >> > >> > > > > * From development perspective It's way much bigger effort > >> than > >> > a > >> > >> > > > connector > >> > >> > > > > (hard to test, packaging/version handling is and extra > layer > >> of > >> > >> > > > complexity, > >> > >> > > > > external FS authentication is pain for users, expecting > them > >> to > >> > >> > > download > >> > >> > > > > savepoints also) > >> > >> > > > > * Purely personal opinion but if we would find better ways > >> later > >> > >> then > >> > >> > > > > retire a CLI is not more lightweight than retire a > connector > >> > >> > > > > > >> > >> > > > > > It would be great if you give some examples on how user > >> could > >> > >> > > leverage > >> > >> > > > > the separate connector to process the metadata. > >> > >> > > > > > >> > >> > > > > The most simplest cases: > >> > >> > > > > * give me the overgroving state uids > >> > >> > > > > * give me the not known (new or renamed) state uids > >> > >> > > > > * give me the state uids where state size drastically > dropped > >> > >> compare > >> > >> > > to > >> > >> > > > a > >> > >> > > > > previous savepoint (accidental state loss) > >> > >> > > > > > >> > >> > > > > Since it was mentioned: as a general offtopic teaser, yeah > it > >> > >> would > >> > >> > be > >> > >> > > > good > >> > >> > > > > to have some sort of checkpoint/savepoint lineage or > however > >> we > >> > >> call > >> > >> > > it. > >> > >> > > > > Since we've not yet reached this point there are no > technical > >> > >> > details, > >> > >> > > > it's > >> > >> > > > > more like a vision. It's a common pattern that > >> > >> > > > > jobs are physically running but somehow the state > processing > >> is > >> > >> stuck > >> > >> > > and > >> > >> > > > > it would be good to add some way to find it out > >> automatically. > >> > >> > > > > The important saying here is automation and not manual > >> > evaluation > >> > >> > since > >> > >> > > > > handling 10k+ jobs is just not allowing that. > >> > >> > > > > > >> > >> > > > > BR, > >> > >> > > > > G > >> > >> > > > > > >> > >> > > > > > >> > >> > > > > On Wed, Mar 19, 2025 at 6:46 AM Shengkai Fang < > >> > fskm...@gmail.com> > >> > >> > > wrote: > >> > >> > > > > > >> > >> > > > > > Hi, All. > >> > >> > > > > > > >> > >> > > > > > About State Catalog, I want to share more thoughts about > >> this. > >> > >> > > > > > > >> > >> > > > > > In the initial design concept, I understood that a > >> savepoint > >> > >> and a > >> > >> > > > state > >> > >> > > > > > catalog have a one-to-one mapping relationship. Each > >> operator > >> > >> > > > corresponds > >> > >> > > > > > to a database, and the state of each operator is > >> represented > >> > as > >> > >> > > > > individual > >> > >> > > > > > tables. The rationale behind this design is: > >> > >> > > > > > > >> > >> > > > > > *State Diversity*: An operator may involve multiple types > >> of > >> > >> > states. > >> > >> > > > For > >> > >> > > > > > example, in our VVR design, a "multi-join" operator uses > >> keyed > >> > >> > states > >> > >> > > > for > >> > >> > > > > > two input streams and a broadcast state for the third > >> stream. > >> > >> This > >> > >> > > > makes > >> > >> > > > > it > >> > >> > > > > > challenging to represent all states of an operator > within a > >> > >> single > >> > >> > > > table. > >> > >> > > > > > *Scalability*: Internally, an operator might have > multiple > >> > keyed > >> > >> > > states > >> > >> > > > > > (e.g., value state and list state). However, large list > >> states > >> > >> may > >> > >> > > not > >> > >> > > > > fit > >> > >> > > > > > entirely in memory. To address this, we recommend > >> implementing > >> > >> each > >> > >> > > > state > >> > >> > > > > > as a separate table. > >> > >> > > > > > > >> > >> > > > > > To resolve the loosely coupled relationships between > >> operator > >> > >> > states, > >> > >> > > > we > >> > >> > > > > > propose embedding predefined views within the catalog. > >> These > >> > >> views > >> > >> > > > > simplify > >> > >> > > > > > user understanding of operator implementations and > provide > >> a > >> > >> more > >> > >> > > > > intuitive > >> > >> > > > > > perspective. For instance, a join operator may have > >> multiple > >> > >> state > >> > >> > > > > > implementations (depending on whether the join key > includes > >> > >> unique > >> > >> > > > > > attributes), but users primarily care about the data > >> > associated > >> > >> > with > >> > >> > > a > >> > >> > > > > > specific join key across input streams. > >> > >> > > > > > > >> > >> > > > > > Returning to the one-to-one mapping between savepoints > and > >> > >> > catalogs, > >> > >> > > we > >> > >> > > > > aim > >> > >> > > > > > to manage multiple user state catalogs through a catalog > >> > store. > >> > >> > When > >> > >> > > a > >> > >> > > > > user > >> > >> > > > > > triggers a savepoint for a job on the platform: > >> > >> > > > > > > >> > >> > > > > > 1. The platform sends a REST request to the JobManager. > >> > >> > > > > > 2. Simultaneously, it registers a new state catalog in > the > >> > >> catalog > >> > >> > > > store, > >> > >> > > > > > enabling immediate analysis of state data on the > platform. > >> > >> > > > > > 3. Deleting a savepoint would also trigger the removal of > >> its > >> > >> > > > associated > >> > >> > > > > > catalog. > >> > >> > > > > > > >> > >> > > > > > This vision assumes that states are self-describing or > >> that a > >> > >> state > >> > >> > > > > > metaservice is introduced to analyze savepoint > structures. > >> > >> > > > > > > >> > >> > > > > > > How can users create logic to identify differences > >> between > >> > >> > multiple > >> > >> > > > > > savepoints? > >> > >> > > > > > > >> > >> > > > > > Since savepoints and state catalogs are one-to-one > mapped, > >> > users > >> > >> > can > >> > >> > > > > query > >> > >> > > > > > metadata via their respective catalogs. For example: > >> > >> > > > > > > >> > >> > > > > > 1. > >> > `savepoint-${id}`.`system`.`metadata_table`.`<operator-name>` > >> > >> > > > provides > >> > >> > > > > > operator-specific metadata (e.g., state size, type). > >> > >> > > > > > 2. Comparing metadata tables (e.g., schema versions, > state > >> > entry > >> > >> > > > counts) > >> > >> > > > > > across catalogs reveals structural or quantitative > >> > differences. > >> > >> > > > > > 3. For deeper analysis, users could write SQL queries to > >> > compare > >> > >> > > > specific > >> > >> > > > > > state partitions or leverage the metaservice to track > state > >> > >> > evolution > >> > >> > > > > > (e.g., added/removed operators, modified state > >> > configurations). > >> > >> > > > > > > >> > >> > > > > > If we plan to introduce a state catalog in the future, I > >> would > >> > >> lean > >> > >> > > > > toward > >> > >> > > > > > using metadata tables. If a utility tool can address the > >> > >> challenges > >> > >> > > we > >> > >> > > > > > face, could we avoid introducing an additional connector? > >> > >> > > > > > > >> > >> > > > > > Best, > >> > >> > > > > > Shengkai > >> > >> > > > > > > >> > >> > > > > > Gyula Fóra <gyula.f...@gmail.com> 于2025年3月17日周一 20:25写道: > >> > >> > > > > > > >> > >> > > > > > > Hi All! > >> > >> > > > > > > > >> > >> > > > > > > Without going into too much detail here are my 2 cents > >> > >> regarding > >> > >> > > the > >> > >> > > > > > > virtual column / catalog metadata / table (connector) > >> > >> discussion > >> > >> > > for > >> > >> > > > > the > >> > >> > > > > > > State metadata. > >> > >> > > > > > > > >> > >> > > > > > > State metadata such as the types of states, their > >> > properties, > >> > >> > > names, > >> > >> > > > > > sizes > >> > >> > > > > > > etc are all valuable information that can be used to > >> enrich > >> > >> the > >> > >> > > > > > > computations we do on state. > >> > >> > > > > > > We can either analyze it standalone (such as discover > >> > >> anomalies, > >> > >> > > for > >> > >> > > > > > large > >> > >> > > > > > > jobs with many states), across multiple savepoints > >> (discover > >> > >> how > >> > >> > > > state > >> > >> > > > > > > changed over time) or by joining it with keyed or > >> non-keyed > >> > >> state > >> > >> > > > data > >> > >> > > > > to > >> > >> > > > > > > serve more complex queries on the state. > >> > >> > > > > > > > >> > >> > > > > > > The only solution that seems to serve all these > use-cases > >> > and > >> > >> > > > > > requirements > >> > >> > > > > > > in a straightforward and SQL canonical way is to simply > >> > expose > >> > >> > the > >> > >> > > > > state > >> > >> > > > > > > metadata as a separate table. This is a metadata table > >> but > >> > you > >> > >> > can > >> > >> > > > also > >> > >> > > > > > > think of it as data table, it makes no practical > >> difference > >> > >> here. > >> > >> > > > > > > > >> > >> > > > > > > Once we have a catalog later, the catalog can offer > this > >> > table > >> > >> > out > >> > >> > > of > >> > >> > > > > the > >> > >> > > > > > > box, the same way databases provide metadata tables. > For > >> > this > >> > >> to > >> > >> > > work > >> > >> > > > > > > however we need another, simpler connector that creates > >> this > >> > >> > table. > >> > >> > > > > > > > >> > >> > > > > > > +1 for state metadata as a separate connector/table, > >> instead > >> > >> of > >> > >> > > > adding > >> > >> > > > > > > virtual columns and adhoc catalog metadata that is hard > >> to > >> > use > >> > >> > in a > >> > >> > > > > large > >> > >> > > > > > > number of queries. > >> > >> > > > > > > > >> > >> > > > > > > Cheers, > >> > >> > > > > > > Gyula > >> > >> > > > > > > > >> > >> > > > > > > On Mon, Mar 17, 2025 at 12:44 PM Gabor Somogyi < > >> > >> > > > > > gabor.g.somo...@gmail.com> > >> > >> > > > > > > wrote: > >> > >> > > > > > > > >> > >> > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > >> > >> > > > > > > > > I’m planning on adding this, and we may collaborate > >> on > >> > it > >> > >> in > >> > >> > > the > >> > >> > > > > > > future. > >> > >> > > > > > > > > >> > >> > > > > > > > +1 on this, just ping me. > >> > >> > > > > > > > > >> > >> > > > > > > > 2. Metadata Table vs. Metadata Column > >> > >> > > > > > > > > >> > >> > > > > > > > After some code digging and POC all I can say that > with > >> > >> heavy > >> > >> > > > effort > >> > >> > > > > we > >> > >> > > > > > > can > >> > >> > > > > > > > maybe add such changes that we're able to show > metadata > >> > of a > >> > >> > > > > savepoint > >> > >> > > > > > > from > >> > >> > > > > > > > catalog. > >> > >> > > > > > > > I'm not against that but from user perspective this > has > >> > >> limited > >> > >> > > > > value, > >> > >> > > > > > > let > >> > >> > > > > > > > me explain why. > >> > >> > > > > > > > > >> > >> > > > > > > > From high level perspective I see the following > which I > >> > see > >> > >> > > > agreement > >> > >> > > > > > on: > >> > >> > > > > > > > * We should have a catalog which is representing one > or > >> > more > >> > >> > jobs > >> > >> > > > > > > savepoint > >> > >> > > > > > > > data set (future plan) > >> > >> > > > > > > > * Savepoints should be able to be registered in the > >> > catalog > >> > >> > which > >> > >> > > > are > >> > >> > > > > > > then > >> > >> > > > > > > > databases (future plan) > >> > >> > > > > > > > * There must be a possiblity to create tables from > >> > databases > >> > >> > > where > >> > >> > > > > > users > >> > >> > > > > > > > can read state data (exists already) > >> > >> > > > > > > > > >> > >> > > > > > > > In terms of metadata, If I understand correctly then > >> the > >> > >> > > suggested > >> > >> > > > > > > approach > >> > >> > > > > > > > would be to access > >> > >> > > > > > > > it from the catalog describe command, right? Adding > >> that > >> > >> info > >> > >> > > when > >> > >> > > > > > > specific > >> > >> > > > > > > > database describe command > >> > >> > > > > > > > is executed could be done. > >> > >> > > > > > > > > >> > >> > > > > > > > The question is for instance how can users create > such > >> a > >> > >> logic > >> > >> > > that > >> > >> > > > > > tells > >> > >> > > > > > > > them what is > >> > >> > > > > > > > the difference between multiple savepoints? > >> > >> > > > > > > > Just to give some examples: > >> > >> > > > > > > > * per operator size changes between savepoints > >> > >> > > > > > > > * show values from operator data where state size > >> reaches > >> > a > >> > >> > > > boundary > >> > >> > > > > > > > * in general "find which checkpoint ruined things" is > >> > quite > >> > >> > > common > >> > >> > > > > > > pattern > >> > >> > > > > > > > What I would like to highlight here is that from > Flink > >> > >> point of > >> > >> > > > view > >> > >> > > > > > the > >> > >> > > > > > > > metadata can be > >> > >> > > > > > > > considered as a static side output information but > for > >> > users > >> > >> > > these > >> > >> > > > > > values > >> > >> > > > > > > > are actual real data > >> > >> > > > > > > > where logic is planned to build around. > >> > >> > > > > > > > > >> > >> > > > > > > > > The metadata is more like one-time information > >> instead > >> > of > >> > >> a > >> > >> > > > > streaming > >> > >> > > > > > > > data that changes all > >> > >> > > > > > > > the time, so a single connector seems to be an > >> overkill. > >> > >> > > > > > > > > >> > >> > > > > > > > State data is also static within a savepoint and > that's > >> > the > >> > >> > > reason > >> > >> > > > > why > >> > >> > > > > > > the > >> > >> > > > > > > > state processor API is working in batch mode. > >> > >> > > > > > > > When we handle multiple checkpoints in a streaming > >> fashion > >> > >> then > >> > >> > > > this > >> > >> > > > > > can > >> > >> > > > > > > be > >> > >> > > > > > > > viewed from another angle. > >> > >> > > > > > > > > >> > >> > > > > > > > We can come up with more lightweight solution other > >> than a > >> > >> new > >> > >> > > > > > connector > >> > >> > > > > > > > but enforcing users to parse the catalog > >> > >> > > > > > > > describe command output in order to compare multiple > >> > >> savepoints > >> > >> > > > > doesn't > >> > >> > > > > > > > sound smooth user experience. > >> > >> > > > > > > > Honestly I've no other idea how exposing metadata as > >> real > >> > >> user > >> > >> > > data > >> > >> > > > > so > >> > >> > > > > > > > waiting on other approaches. > >> > >> > > > > > > > > >> > >> > > > > > > > BR, > >> > >> > > > > > > > G > >> > >> > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > On Thu, Mar 13, 2025 at 2:44 AM Shengkai Fang < > >> > >> > fskm...@gmail.com > >> > >> > > > > >> > >> > > > > > wrote: > >> > >> > > > > > > > > >> > >> > > > > > > > > Looking forward to hearing the good news! > >> > >> > > > > > > > > > >> > >> > > > > > > > > Best, > >> > >> > > > > > > > > Shengkai > >> > >> > > > > > > > > > >> > >> > > > > > > > > Gabor Somogyi <gabor.g.somo...@gmail.com> > >> 于2025年3月12日周三 > >> > >> > > 22:24写道: > >> > >> > > > > > > > > > >> > >> > > > > > > > > > Thanks for both the valuable input! > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > Let me take a closer look at the suggestions, > like > >> the > >> > >> > > Catalog > >> > >> > > > > > > > > capabilities > >> > >> > > > > > > > > > and possibility of embedding TypeInformation or > >> > >> > > > > > > > > > StateDescriptor metadata directly into the raw > >> state > >> > >> > files... > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > BR, > >> > >> > > > > > > > > > G > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > On Wed, Mar 12, 2025 at 8:17 AM Shengkai Fang < > >> > >> > > > fskm...@gmail.com > >> > >> > > > > > > >> > >> > > > > > > > wrote: > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > > Thanks for Zakelly's clarification. > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > +1 to delay the discussion about this. > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > 2. Metadata Table vs. Metadata Column > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > I’d like to share my perspective on the State > >> > Catalog > >> > >> > > > proposal. > >> > >> > > > > > > While > >> > >> > > > > > > > > > > introducing this capability is beneficial, > there > >> is > >> > a > >> > >> > > > blocker: > >> > >> > > > > > the > >> > >> > > > > > > > > > current > >> > >> > > > > > > > > > > StateBackend architecture does not permit > >> operators > >> > to > >> > >> > > encode > >> > >> > > > > > > > > > > TypeInformation into the state—it only > preserves > >> the > >> > >> > > > > Serializer. > >> > >> > > > > > > This > >> > >> > > > > > > > > > > limitation creates an asymmetry, as operators > >> alone > >> > >> > retain > >> > >> > > > > > > knowledge > >> > >> > > > > > > > of > >> > >> > > > > > > > > > the > >> > >> > > > > > > > > > > data structure’s schema. > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > To address this, I suggest allowing operators > to > >> > embed > >> > >> > > > > > > > TypeInformation > >> > >> > > > > > > > > or > >> > >> > > > > > > > > > > StateDescriptor metadata directly into the raw > >> state > >> > >> > files. > >> > >> > > > > Such > >> > >> > > > > > a > >> > >> > > > > > > > > design > >> > >> > > > > > > > > > > would enable the Catalog to: > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > 1. Parse state files and programmatically > derive > >> the > >> > >> > schema > >> > >> > > > and > >> > >> > > > > > > > > > structural > >> > >> > > > > > > > > > > guarantees for each state. > >> > >> > > > > > > > > > > 2. Leverage existing Flink Table utilities, > such > >> as > >> > >> > > > > > > > > > > LegacyTypeInfoDataTypeConverter (in > >> > >> > > > > > > > > org.apache.flink.table.types.utils), > >> > >> > > > > > > > > > to > >> > >> > > > > > > > > > > bridge TypeInformation and DataType > conversions. > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > If we can not store the TypeInformation or > >> > >> > StateDescriptor > >> > >> > > > into > >> > >> > > > > > the > >> > >> > > > > > > > raw > >> > >> > > > > > > > > > > state files, I am +1 for this FLIP to use > >> metadata > >> > >> column > >> > >> > > to > >> > >> > > > > > > retrieve > >> > >> > > > > > > > > > > information. > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > Best, > >> > >> > > > > > > > > > > Shengkai > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > Zakelly Lan <zakelly....@gmail.com> > >> 于2025年3月12日周三 > >> > >> > 12:43写道: > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > > Hi Gabor and Shengkai, > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > Thanks for sharing your thoughts! This is a > >> long > >> > >> > > discussion > >> > >> > > > > and > >> > >> > > > > > > > sorry > >> > >> > > > > > > > > > for > >> > >> > > > > > > > > > > > the late reply (I'm busy catching up with > >> release > >> > >> 2.0 > >> > >> > > these > >> > >> > > > > > > days). > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > Let me first clarify your thoughts to ensure > I > >> > >> > understand > >> > >> > > > > > > > correctly. > >> > >> > > > > > > > > > > IIUC, > >> > >> > > > > > > > > > > > there is no persistent configuration for > state > >> TTL > >> > >> in > >> > >> > the > >> > >> > > > > > > > checkpoint. > >> > >> > > > > > > > > > > While > >> > >> > > > > > > > > > > > you can infer that TTL is enabled by reading > >> the > >> > >> > > > serializer, > >> > >> > > > > > the > >> > >> > > > > > > > > > > checkpoint > >> > >> > > > > > > > > > > > itself only stores the last access time for > >> each > >> > >> value. > >> > >> > > So > >> > >> > > > > the > >> > >> > > > > > > only > >> > >> > > > > > > > > > thing > >> > >> > > > > > > > > > > > we can show is the last access time for each > >> > value. > >> > >> But > >> > >> > > it > >> > >> > > > is > >> > >> > > > > > not > >> > >> > > > > > > > > > > required > >> > >> > > > > > > > > > > > for all state backends to store this, as they > >> may > >> > >> > > directly > >> > >> > > > > > store > >> > >> > > > > > > > the > >> > >> > > > > > > > > > > > expired time. This will also increase the > >> > >> difficulty of > >> > >> > > > > > > > > implementation > >> > >> > > > > > > > > > & > >> > >> > > > > > > > > > > > maintenance. > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > This once again reiterates the importance of > >> > unified > >> > >> > > > metadata > >> > >> > > > > > for > >> > >> > > > > > > > > > > > checkpoints. I’m planning on adding this, and > >> we > >> > may > >> > >> > > > > > collaborate > >> > >> > > > > > > on > >> > >> > > > > > > > > it > >> > >> > > > > > > > > > in > >> > >> > > > > > > > > > > > the future. > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > 2. Metadata Table vs. Metadata Column > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > I'm not in favor of adding a new connector > for > >> > >> > metadata. > >> > >> > > > The > >> > >> > > > > > > > metadata > >> > >> > > > > > > > > > is > >> > >> > > > > > > > > > > > more like one-time information instead of a > >> > >> streaming > >> > >> > > data > >> > >> > > > > that > >> > >> > > > > > > > > changes > >> > >> > > > > > > > > > > all > >> > >> > > > > > > > > > > > the time, so a single connector seems to be > an > >> > >> > overkill. > >> > >> > > It > >> > >> > > > > is > >> > >> > > > > > > not > >> > >> > > > > > > > > easy > >> > >> > > > > > > > > > > to > >> > >> > > > > > > > > > > > withdraw a connector if we have a better > >> solution > >> > in > >> > >> > > > future. > >> > >> > > > > > I'm > >> > >> > > > > > > > not > >> > >> > > > > > > > > > > > familiar with current Catalog capabilities, > >> and if > >> > >> it > >> > >> > > could > >> > >> > > > > > > extract > >> > >> > > > > > > > > and > >> > >> > > > > > > > > > > > show some operator-level information from > >> > savepoint, > >> > >> > that > >> > >> > > > > would > >> > >> > > > > > > be > >> > >> > > > > > > > > > great. > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > If the Catalog can't do that, I would > consider > >> the > >> > >> > > current > >> > >> > > > > FLIP > >> > >> > > > > > > to > >> > >> > > > > > > > > be a > >> > >> > > > > > > > > > > > compromise solution. > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > And if we have that unified metadata for > >> > >> > > > checkpoint/savepoint > >> > >> > > > > > in > >> > >> > > > > > > > > > future, > >> > >> > > > > > > > > > > we > >> > >> > > > > > > > > > > > may directly register savepoint in catalog, > and > >> > >> create > >> > >> > a > >> > >> > > > > source > >> > >> > > > > > > > > without > >> > >> > > > > > > > > > > > specifying complex columns, as well as > describe > >> > the > >> > >> > > > savepoint > >> > >> > > > > > > > catalog > >> > >> > > > > > > > > > to > >> > >> > > > > > > > > > > > get the metadata. That's a good solution in > my > >> > mind. > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > Best, > >> > >> > > > > > > > > > > > Zakelly > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > On Wed, Mar 12, 2025 at 10:35 AM Shengkai > Fang > >> < > >> > >> > > > > > > fskm...@gmail.com> > >> > >> > > > > > > > > > > wrote: > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > > Hi Gabor, > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > 2. Adding a new connector with > >> > >> `savepoint-metadata` > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > I would argue against introducing a new > >> > connector > >> > >> > type > >> > >> > > > > named > >> > >> > > > > > > > > > > > > savepoint-metadata, as the existing Catalog > >> > >> mechanism > >> > >> > > can > >> > >> > > > > > > > > inherently > >> > >> > > > > > > > > > > > > provide the necessary connector factory > >> > >> capabilities. > >> > >> > > > I’ve > >> > >> > > > > > > > detailed > >> > >> > > > > > > > > > > this > >> > >> > > > > > > > > > > > > proposal in branch[1]. Please take a moment > >> to > >> > >> review > >> > >> > > it. > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > If we introduce a connector named > >> > >> > `savepoint-metadata`, > >> > >> > > > it > >> > >> > > > > > > means > >> > >> > > > > > > > > user > >> > >> > > > > > > > > > > can > >> > >> > > > > > > > > > > > > create a temporary table with connector > >> > >> > > > > `savepoint-metadata` > >> > >> > > > > > > and > >> > >> > > > > > > > > the > >> > >> > > > > > > > > > > > > connector needs to check whether table > >> schema is > >> > >> same > >> > >> > > to > >> > >> > > > > the > >> > >> > > > > > > > schema > >> > >> > > > > > > > > > we > >> > >> > > > > > > > > > > > > proposed in the FLIP. On the other hand, > it's > >> > not > >> > >> > easy > >> > >> > > > work > >> > >> > > > > > for > >> > >> > > > > > > > > > others > >> > >> > > > > > > > > > > to > >> > >> > > > > > > > > > > > > users a metadata table with same schema. > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > [1] > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://github.com/apache/flink/compare/master...fsk119:flink:state-metadata?expand=1#diff-712a7bc92fe46c405fb0e61b475bb2a005cb7a72bab7df28bbb92744bcb5f465R63 > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > Best, > >> > >> > > > > > > > > > > > > Shengkai > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > Gabor Somogyi <gabor.g.somo...@gmail.com> > >> > >> > > 于2025年3月11日周二 > >> > >> > > > > > > 16:56写道: > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > Hi Shengkai, > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > From directional perspective I agree your > >> idea > >> > >> how > >> > >> > it > >> > >> > > > can > >> > >> > > > > > be > >> > >> > > > > > > > > > > > implemented. > >> > >> > > > > > > > > > > > > > Previously I've mentioned that TTL > >> information > >> > >> is > >> > >> > not > >> > >> > > > > > exposed > >> > >> > > > > > > > on > >> > >> > > > > > > > > > the > >> > >> > > > > > > > > > > > > state > >> > >> > > > > > > > > > > > > > processor API (which the SQL state > >> connector > >> > >> uses > >> > >> > to > >> > >> > > > read > >> > >> > > > > > > data) > >> > >> > > > > > > > > > > > > > and unless somebody show me the opposite > >> this > >> > >> FLIP > >> > >> > is > >> > >> > > > not > >> > >> > > > > > > going > >> > >> > > > > > > > > to > >> > >> > > > > > > > > > > > > address > >> > >> > > > > > > > > > > > > > this to avoid feature creep. Our users > are > >> > also > >> > >> > > > > interested > >> > >> > > > > > in > >> > >> > > > > > > > TTL > >> > >> > > > > > > > > > so > >> > >> > > > > > > > > > > > > > sooner or later we're going to expose it, > >> this > >> > >> is > >> > >> > > > matter > >> > >> > > > > of > >> > >> > > > > > > > > > > scheduling. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > 2. Adding a new connector with > >> > >> > `savepoint-metadata` > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > Not sure I understand your point at all > >> > related > >> > >> > > > > > StateCatalog. > >> > >> > > > > > > > > First > >> > >> > > > > > > > > > > of > >> > >> > > > > > > > > > > > > all > >> > >> > > > > > > > > > > > > > I can't agree more that StateCatalog is > >> needed > >> > >> and > >> > >> > > is a > >> > >> > > > > > > planned > >> > >> > > > > > > > > > > > building > >> > >> > > > > > > > > > > > > > block in an upcoming > >> > >> > > > > > > > > > > > > > FLIP but not sure how can it help now? No > >> > matter > >> > >> > > what, > >> > >> > > > > your > >> > >> > > > > > > > > > knowledge > >> > >> > > > > > > > > > > > is > >> > >> > > > > > > > > > > > > > essential when we add StateCatalog. Let > me > >> > >> expose > >> > >> > my > >> > >> > > > > > > > > understanding > >> > >> > > > > > > > > > in > >> > >> > > > > > > > > > > > > this > >> > >> > > > > > > > > > > > > > area: > >> > >> > > > > > > > > > > > > > * First we need create table statements > to > >> > >> access > >> > >> > > state > >> > >> > > > > > data > >> > >> > > > > > > > and > >> > >> > > > > > > > > > > > metadata > >> > >> > > > > > > > > > > > > > * When we have that then we can add > >> > StateCatalog > >> > >> > > which > >> > >> > > > > > could > >> > >> > > > > > > > > > > > potentially > >> > >> > > > > > > > > > > > > > ease the life of users by for ex. giving > >> > >> > > off-the-shelf > >> > >> > > > > > tables > >> > >> > > > > > > > > > without > >> > >> > > > > > > > > > > > > > sweating with create table statements > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > User expectations: > >> > >> > > > > > > > > > > > > > * See state data (this is fulfilled with > >> the > >> > >> > existing > >> > >> > > > > > > > connector) > >> > >> > > > > > > > > > > > > > * See metadata about state data like TTL > >> (this > >> > >> can > >> > >> > be > >> > >> > > > > added > >> > >> > > > > > > as > >> > >> > > > > > > > > > > metadata > >> > >> > > > > > > > > > > > > > column as you suggested since it belongs > to > >> > the > >> > >> > data) > >> > >> > > > > > > > > > > > > > * See metadata about operators (this can > be > >> > >> added > >> > >> > > from > >> > >> > > > > > > > > > > > > savepoint-metadata) > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > Important to highlight that state data > >> table > >> > >> format > >> > >> > > > > differs > >> > >> > > > > > > > from > >> > >> > > > > > > > > > > state > >> > >> > > > > > > > > > > > > > metadata table format. Namely one table > has > >> > rows > >> > >> > for > >> > >> > > > > state > >> > >> > > > > > > > values > >> > >> > > > > > > > > > and > >> > >> > > > > > > > > > > > > > another has rows for operators, right? > >> > >> > > > > > > > > > > > > > I think that's the reason why you've > >> > pinpointed > >> > >> out > >> > >> > > > that > >> > >> > > > > > the > >> > >> > > > > > > > > > > suggested > >> > >> > > > > > > > > > > > > > metadata columns are somewhat clunky. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > As a conclusion I agree to add > >> > ${state-name}_ttl > >> > >> > > > metadata > >> > >> > > > > > > > column > >> > >> > > > > > > > > > > later > >> > >> > > > > > > > > > > > on > >> > >> > > > > > > > > > > > > > since it belongs to the state value and > >> > adding a > >> > >> > new > >> > >> > > > > table > >> > >> > > > > > > type > >> > >> > > > > > > > > > (like > >> > >> > > > > > > > > > > > you > >> > >> > > > > > > > > > > > > > suggested similar to PG [1]) > >> > >> > > > > > > > > > > > > > for metadata. Please see how Spark does > >> that > >> > too > >> > >> > [2]. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > If you have better approach then please > >> > >> elaborate > >> > >> > > with > >> > >> > > > > more > >> > >> > > > > > > > > details > >> > >> > > > > > > > > > > and > >> > >> > > > > > > > > > > > > > help me to understand your point. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Up until now we've seen even in TB > >> > savepoints > >> > >> > that > >> > >> > > > the > >> > >> > > > > > > number > >> > >> > > > > > > > > of > >> > >> > > > > > > > > > > keys > >> > >> > > > > > > > > > > > > can > >> > >> > > > > > > > > > > > > > > be extremely huge but not the per key > >> state > >> > >> > itself. > >> > >> > > > > > > > > > > > > > > But again, this is a good feature as-is > >> and > >> > >> can > >> > >> > be > >> > >> > > > > > handled > >> > >> > > > > > > > in a > >> > >> > > > > > > > > > > > > separate > >> > >> > > > > > > > > > > > > > > jira. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > I've just created > >> > >> > > > > > > > > > > https://issues.apache.org/jira/browse/FLINK-37456. > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > [1] > >> > >> > > > > > > > > >> > https://www.postgresql.org/docs/current/view-pg-tables.html > >> > >> > > > > > > > > > > > > > [2] > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://www.databricks.com/blog/announcing-state-reader-api-new-statestore-data-source > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > BR, > >> > >> > > > > > > > > > > > > > G > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > On Tue, Mar 11, 2025 at 3:55 AM Shengkai > >> Fang > >> > < > >> > >> > > > > > > > fskm...@gmail.com > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > > > wrote: > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Hi, Gabor. Thanks for your response. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Thank you for addressing the > limitations > >> > here. > >> > >> > > > > However, I > >> > >> > > > > > > > > believe > >> > >> > > > > > > > > > > it > >> > >> > > > > > > > > > > > > > would > >> > >> > > > > > > > > > > > > > > be beneficial to further clarify the > API > >> in > >> > >> this > >> > >> > > FLIP > >> > >> > > > > > > > regarding > >> > >> > > > > > > > > > how > >> > >> > > > > > > > > > > > > users > >> > >> > > > > > > > > > > > > > > can specify the TTL column. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > One potential approach that comes to > >> mind is > >> > >> > using > >> > >> > > a > >> > >> > > > > > > > > standardized > >> > >> > > > > > > > > > > > > naming > >> > >> > > > > > > > > > > > > > > convention such as ${state-name}_ttl > for > >> the > >> > >> > > metadata > >> > >> > > > > > > column > >> > >> > > > > > > > > that > >> > >> > > > > > > > > > > > > defines > >> > >> > > > > > > > > > > > > > > the TTL value. In terms of > >> implementation, > >> > the > >> > >> > > > > > > > > > listReadableMetadata > >> > >> > > > > > > > > > > > > > > function could: > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > 1. Read the table’s columns and > >> > configuration, > >> > >> > > > > > > > > > > > > > > 2. Extract all defined state names, and > >> > >> > > > > > > > > > > > > > > 3. Return a structured list of metadata > >> > >> entries > >> > >> > > > > formatted > >> > >> > > > > > > as > >> > >> > > > > > > > > > > > > > > ${state-name}_ttl. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > WDYT? > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > 2. Adding a new connector with > >> > >> > > `savepoint-metadata` > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Introducing a new connector type at > this > >> > stage > >> > >> > may > >> > >> > > > > > > > > unnecessarily > >> > >> > > > > > > > > > > > > > complicate > >> > >> > > > > > > > > > > > > > > the system. Given that every table > >> already > >> > >> > belongs > >> > >> > > > to a > >> > >> > > > > > > > > Catalog, > >> > >> > > > > > > > > > > > which > >> > >> > > > > > > > > > > > > is > >> > >> > > > > > > > > > > > > > > designed to provide a Factory for > >> building > >> > >> source > >> > >> > > or > >> > >> > > > > sink > >> > >> > > > > > > > > > > > connectors, I > >> > >> > > > > > > > > > > > > > > propose integrating a dedicated > >> StateCatalog > >> > >> > > instead. > >> > >> > > > > > This > >> > >> > > > > > > > > > approach > >> > >> > > > > > > > > > > > > would > >> > >> > > > > > > > > > > > > > > allow us to: > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > 1. Leverage the Catalog’s existing > >> > >> capabilities > >> > >> > to > >> > >> > > > > manage > >> > >> > > > > > > TTL > >> > >> > > > > > > > > > > > metadata > >> > >> > > > > > > > > > > > > > > (e.g., state names and TTL logic) > without > >> > >> > > duplicating > >> > >> > > > > > > > > > > functionality. > >> > >> > > > > > > > > > > > > > > 2. Provide a unified interface for > >> connector > >> > >> > > > > > instantiation > >> > >> > > > > > > > and > >> > >> > > > > > > > > > > > metadata > >> > >> > > > > > > > > > > > > > > handling through the Catalog’s Factory > >> > >> pattern. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Would this design decision better align > >> with > >> > >> our > >> > >> > > > > > > > architecture’s > >> > >> > > > > > > > > > > > > > > extensibility and reduce redundancy? > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Up until now we've seen even in TB > >> > >> savepoints > >> > >> > > that > >> > >> > > > > the > >> > >> > > > > > > > number > >> > >> > > > > > > > > > of > >> > >> > > > > > > > > > > > keys > >> > >> > > > > > > > > > > > > > can > >> > >> > > > > > > > > > > > > > > > be extremely huge but not the per key > >> > state > >> > >> > > itself. > >> > >> > > > > > > > > > > > > > > > But again, this is a good feature > as-is > >> > and > >> > >> can > >> > >> > > be > >> > >> > > > > > > handled > >> > >> > > > > > > > > in a > >> > >> > > > > > > > > > > > > > separate > >> > >> > > > > > > > > > > > > > > > jira. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > +1 for a separate jira. > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Best, > >> > >> > > > > > > > > > > > > > > Shengkai > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > Gabor Somogyi < > gabor.g.somo...@gmail.com > >> > > >> > >> > > > > 于2025年3月10日周一 > >> > >> > > > > > > > > 19:05写道: > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Hi Shengkai, > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Please see my comments inline. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > BR, > >> > >> > > > > > > > > > > > > > > > G > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > On Mon, Mar 3, 2025 at 7:07 AM > Shengkai > >> > >> Fang < > >> > >> > > > > > > > > > fskm...@gmail.com> > >> > >> > > > > > > > > > > > > > wrote: > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > Hi, Gabor. Thanks for your the > FLIP. > >> I > >> > >> have > >> > >> > > some > >> > >> > > > > > > > questions > >> > >> > > > > > > > > > > about > >> > >> > > > > > > > > > > > > the > >> > >> > > > > > > > > > > > > > > > FLIP: > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > 1. State TTL for Value Columns > >> > >> > > > > > > > > > > > > > > > > How can users retrieve the state > TTL > >> > >> > > > (Time-to-Live) > >> > >> > > > > > for > >> > >> > > > > > > > > each > >> > >> > > > > > > > > > > > value > >> > >> > > > > > > > > > > > > > > > column? > >> > >> > > > > > > > > > > > > > > > > From my understanding of the > current > >> > >> design, > >> > >> > it > >> > >> > > > > seems > >> > >> > > > > > > > that > >> > >> > > > > > > > > > this > >> > >> > > > > > > > > > > > > > > > > functionality is not supported. > Could > >> > you > >> > >> > > clarify > >> > >> > > > > if > >> > >> > > > > > > > there > >> > >> > > > > > > > > > are > >> > >> > > > > > > > > > > > > plans > >> > >> > > > > > > > > > > > > > to > >> > >> > > > > > > > > > > > > > > > > address this limitation? > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Since the state processor API is not > >> yet > >> > >> > exposing > >> > >> > > > > this > >> > >> > > > > > > > > > > information > >> > >> > > > > > > > > > > > > this > >> > >> > > > > > > > > > > > > > > > would require several steps. > >> > >> > > > > > > > > > > > > > > > First, the state processor API > support > >> > >> needs to > >> > >> > > be > >> > >> > > > > > added > >> > >> > > > > > > > > which > >> > >> > > > > > > > > > > can > >> > >> > > > > > > > > > > > be > >> > >> > > > > > > > > > > > > > > then > >> > >> > > > > > > > > > > > > > > > exposed on the SQL API. > >> > >> > > > > > > > > > > > > > > > This is definitely a future > improvement > >> > >> which > >> > >> > is > >> > >> > > > > useful > >> > >> > > > > > > and > >> > >> > > > > > > > > can > >> > >> > > > > > > > > > > be > >> > >> > > > > > > > > > > > > > > handled > >> > >> > > > > > > > > > > > > > > > in a separate jira. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > 2. Metadata Table vs. Metadata > Column > >> > >> > > > > > > > > > > > > > > > > The metadata information described > in > >> > the > >> > >> > FLIP > >> > >> > > > > > appears > >> > >> > > > > > > to > >> > >> > > > > > > > > be > >> > >> > > > > > > > > > > > > intended > >> > >> > > > > > > > > > > > > > > to > >> > >> > > > > > > > > > > > > > > > > describe the state files stored at > a > >> > >> specific > >> > >> > > > > > location. > >> > >> > > > > > > > To > >> > >> > > > > > > > > > me, > >> > >> > > > > > > > > > > > this > >> > >> > > > > > > > > > > > > > > > concept > >> > >> > > > > > > > > > > > > > > > > aligns more closely with system > >> tables > >> > >> like > >> > >> > > > > pg_tables > >> > >> > > > > > > in > >> > >> > > > > > > > > > > > PostgreSQL > >> > >> > > > > > > > > > > > > > [1] > >> > >> > > > > > > > > > > > > > > > or > >> > >> > > > > > > > > > > > > > > > > the INFORMATION_SCHEMA in MySQL > [2]. > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Adding a new connector with > >> > >> > `savepoint-metadata` > >> > >> > > > is a > >> > >> > > > > > > > > > possibility > >> > >> > > > > > > > > > > > > where > >> > >> > > > > > > > > > > > > > > we > >> > >> > > > > > > > > > > > > > > > can create such functionality. > >> > >> > > > > > > > > > > > > > > > I'm not against that, just want to > >> have a > >> > >> > common > >> > >> > > > > > > agreement > >> > >> > > > > > > > > that > >> > >> > > > > > > > > > > we > >> > >> > > > > > > > > > > > > > would > >> > >> > > > > > > > > > > > > > > > like to move that direction. > >> > >> > > > > > > > > > > > > > > > (As a side note not just PG but Spark > >> also > >> > >> has > >> > >> > > > > similar > >> > >> > > > > > > > > approach > >> > >> > > > > > > > > > > > and I > >> > >> > > > > > > > > > > > > > > > basically like the idea). > >> > >> > > > > > > > > > > > > > > > If we would go that direction > savepoint > >> > >> > metadata > >> > >> > > > can > >> > >> > > > > be > >> > >> > > > > > > > > reached > >> > >> > > > > > > > > > > in > >> > >> > > > > > > > > > > > a > >> > >> > > > > > > > > > > > > > way > >> > >> > > > > > > > > > > > > > > > that one row would represent > >> > >> > > > > > > > > > > > > > > > an operator with it's values > something > >> > like > >> > >> > this: > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > │operatorN│operatorU│operatorH│paralleli│maxParall│subtaskSt│coordinat│totalSta│ > >> > >> > > > > > > > > > > > > > > > │ame │id │ash │sm > >> > >> │elism > >> > >> > > > > > > > > > > > > > > > │atesCount│orStateSi│tesSizeI│ > >> > >> > > > > > > > > > > > > > > > │ │ │ │ > >> │ > >> > >> > > │ > >> > >> > > > > > > > > > > > > > > > │zeInBytes│nBytes │ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤ > >> > >> > > > > > > > > > > > > > > > │Source: │datagen-s│47aee9439│2 > >> > │128 > >> > >> > > > │2 > >> > >> > > > > > > > > │16 > >> > >> > > > > > > > > > > > > > > > │546 │ > >> > >> > > > > > > > > > > > > > > > │datagen-s│ource-uid│4d6ea26e2│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ource │ │d544bef0a│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ │ │37bb5 │ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤ > >> > >> > > > > > > > > > > > > > > > │long-udf-│long-udf-│6ed3f40bf│2 > >> > │128 > >> > >> > > > │2 > >> > >> > > > > > > > > │0 > >> > >> > > > > > > > > > > > > > │0 > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │with-mast│with-mast│f3c8dfcdf│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │er-hook │er-hook-u│cb95128a1│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ │id │018f1 │ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤ > >> > >> > > > > > > > > > > > > > > > │value-pro│value-pro│ca4f5fe9a│2 > >> > │128 > >> > >> > > > │2 > >> > >> > > > > > > > > │0 > >> > >> > > > > > > > > > > > > > > > │40726 │ > >> > >> > > > > > > > > > > > > > > > │cess │cess-uid │637b656f0│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ │ │9ea78b3e7│ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ │ │a15b9 │ > >> │ > >> > >> > > │ > >> > >> > > > > > > > │ > >> > >> > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > │ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤ > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > This table can then be joined with > the > >> > >> actually > >> > >> > > > > > existing > >> > >> > > > > > > > > > > > `savepoint` > >> > >> > > > > > > > > > > > > > > > connector created tables based on UID > >> hash > >> > >> > (which > >> > >> > > > is > >> > >> > > > > > > unique > >> > >> > > > > > > > > and > >> > >> > > > > > > > > > > > > always > >> > >> > > > > > > > > > > > > > > > exists). > >> > >> > > > > > > > > > > > > > > > This would mean that the already > >> existing > >> > >> table > >> > >> > > > would > >> > >> > > > > > > need > >> > >> > > > > > > > > > only a > >> > >> > > > > > > > > > > > > > single > >> > >> > > > > > > > > > > > > > > > metadata column which is the UID > hash. > >> > >> > > > > > > > > > > > > > > > WDYT? > >> > >> > > > > > > > > > > > > > > > @zakelly, plz share your thoughts > too. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > If we opt to use metadata columns, > >> every > >> > >> > record > >> > >> > > > in > >> > >> > > > > > the > >> > >> > > > > > > > > table > >> > >> > > > > > > > > > > > would > >> > >> > > > > > > > > > > > > > end > >> > >> > > > > > > > > > > > > > > up > >> > >> > > > > > > > > > > > > > > > > having identical values for these > >> > columns > >> > >> > > (please > >> > >> > > > > > > correct > >> > >> > > > > > > > > me > >> > >> > > > > > > > > > if > >> > >> > > > > > > > > > > > I’m > >> > >> > > > > > > > > > > > > > > > > mistaken). On the other hand, the > >> state > >> > >> > > connector > >> > >> > > > > > > > requires > >> > >> > > > > > > > > > > users > >> > >> > > > > > > > > > > > to > >> > >> > > > > > > > > > > > > > > > specify > >> > >> > > > > > > > > > > > > > > > > an operator UID or operator UID > hash, > >> > >> after > >> > >> > > which > >> > >> > > > > it > >> > >> > > > > > > > > outputs > >> > >> > > > > > > > > > > > > > > user-defined > >> > >> > > > > > > > > > > > > > > > > values in its records. This > approach > >> > feels > >> > >> > > > somewhat > >> > >> > > > > > > > > redundant > >> > >> > > > > > > > > > > to > >> > >> > > > > > > > > > > > > me. > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > If we would add a new > >> `savepoint-metadata` > >> > >> > > > connector > >> > >> > > > > > then > >> > >> > > > > > > > > this > >> > >> > > > > > > > > > > can > >> > >> > > > > > > > > > > > be > >> > >> > > > > > > > > > > > > > > > addressed. > >> > >> > > > > > > > > > > > > > > > On the other hand UID and UID hash > are > >> > >> having > >> > >> > > > > either-or > >> > >> > > > > > > > > > > > relationship > >> > >> > > > > > > > > > > > > > from > >> > >> > > > > > > > > > > > > > > > config perspective, > >> > >> > > > > > > > > > > > > > > > so when a user provides the UID then > >> > he/she > >> > >> can > >> > >> > > be > >> > >> > > > > > > > interested > >> > >> > > > > > > > > > in > >> > >> > > > > > > > > > > > the > >> > >> > > > > > > > > > > > > > hash > >> > >> > > > > > > > > > > > > > > > for further calculations > >> > >> > > > > > > > > > > > > > > > (the whole Flink internals are > >> depending > >> > on > >> > >> the > >> > >> > > > > hash). > >> > >> > > > > > > > > Printing > >> > >> > > > > > > > > > > out > >> > >> > > > > > > > > > > > > the > >> > >> > > > > > > > > > > > > > > > human readable UID > >> > >> > > > > > > > > > > > > > > > is an explicit requirement from the > >> user > >> > >> side > >> > >> > > > because > >> > >> > > > > > > > hashes > >> > >> > > > > > > > > > are > >> > >> > > > > > > > > > > > not > >> > >> > > > > > > > > > > > > > > human > >> > >> > > > > > > > > > > > > > > > readable. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > 3. Handling LIST and MAP States in > >> the > >> > >> State > >> > >> > > > > > Connector > >> > >> > > > > > > > > > > > > > > > > I have concerns about how the > current > >> > >> design > >> > >> > > > > handles > >> > >> > > > > > > LIST > >> > >> > > > > > > > > and > >> > >> > > > > > > > > > > MAP > >> > >> > > > > > > > > > > > > > > states. > >> > >> > > > > > > > > > > > > > > > > Specifically, the state connector > >> uses > >> > >> Flink > >> > >> > > > SQL’s > >> > >> > > > > > MAP > >> > >> > > > > > > > and > >> > >> > > > > > > > > > > ARRAY > >> > >> > > > > > > > > > > > > > types, > >> > >> > > > > > > > > > > > > > > > > which implies that it attempts to > >> load > >> > >> entire > >> > >> > > MAP > >> > >> > > > > or > >> > >> > > > > > > LIST > >> > >> > > > > > > > > > > states > >> > >> > > > > > > > > > > > > into > >> > >> > > > > > > > > > > > > > > > > memory. > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > However, in many real-world > >> scenarios, > >> > >> these > >> > >> > > > states > >> > >> > > > > > can > >> > >> > > > > > > > > grow > >> > >> > > > > > > > > > > very > >> > >> > > > > > > > > > > > > > > large. > >> > >> > > > > > > > > > > > > > > > > Typically, the state API addresses > >> this > >> > by > >> > >> > > > > providing > >> > >> > > > > > an > >> > >> > > > > > > > > > > iterator > >> > >> > > > > > > > > > > > to > >> > >> > > > > > > > > > > > > > > > > traverse elements within the state > >> > >> > > incrementally. > >> > >> > > > > I’m > >> > >> > > > > > > > > unsure > >> > >> > > > > > > > > > > > > whether > >> > >> > > > > > > > > > > > > > > I’ve > >> > >> > > > > > > > > > > > > > > > > missed something in FLIP-496 or > >> > FLIP-512, > >> > >> but > >> > >> > > it > >> > >> > > > > > seems > >> > >> > > > > > > > that > >> > >> > > > > > > > > > the > >> > >> > > > > > > > > > > > > > current > >> > >> > > > > > > > > > > > > > > > > design might struggle with > >> scalability > >> > in > >> > >> > such > >> > >> > > > > cases. > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > You see it good, the current > >> > implementation > >> > >> > keeps > >> > >> > > > > state > >> > >> > > > > > > > for a > >> > >> > > > > > > > > > > > single > >> > >> > > > > > > > > > > > > > key > >> > >> > > > > > > > > > > > > > > in > >> > >> > > > > > > > > > > > > > > > memory. > >> > >> > > > > > > > > > > > > > > > Back in the days we've considered > this > >> > >> > potential > >> > >> > > > > issue > >> > >> > > > > > > and > >> > >> > > > > > > > > > > > concluded > >> > >> > > > > > > > > > > > > > that > >> > >> > > > > > > > > > > > > > > > this is not necessarily > >> > >> > > > > > > > > > > > > > > > needed for the initial version and > can > >> be > >> > >> done > >> > >> > > as a > >> > >> > > > > > later > >> > >> > > > > > > > > > > > > improvement. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > Up until now we've seen even in TB > >> > >> savepoints > >> > >> > > that > >> > >> > > > > the > >> > >> > > > > > > > number > >> > >> > > > > > > > > > of > >> > >> > > > > > > > > > > > keys > >> > >> > > > > > > > > > > > > > can > >> > >> > > > > > > > > > > > > > > > be extremely huge but not the per key > >> > state > >> > >> > > itself. > >> > >> > > > > > > > > > > > > > > > But again, this is a good feature > as-is > >> > and > >> > >> can > >> > >> > > be > >> > >> > > > > > > handled > >> > >> > > > > > > > > in a > >> > >> > > > > > > > > > > > > > separate > >> > >> > > > > > > > > > > > > > > > jira. > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > Best, > >> > >> > > > > > > > > > > > > > > > > Shengkai > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > [1] > >> > >> > > > > > > > > > > > >> > >> > > https://www.postgresql.org/docs/current/view-pg-tables.html > >> > >> > > > > > > > > > > > > > > > > [2] > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://dev.mysql.com/doc/refman/8.4/en/information-schema-tables-table.html > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > Gabor Somogyi < > >> > gabor.g.somo...@gmail.com> > >> > >> > > > > > 于2025年3月3日周一 > >> > >> > > > > > > > > > > 02:00写道: > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > Hi Zakelly, > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > In order to shoot for simplicity > >> > >> `METADATA > >> > >> > > > > VIRTUAL` > >> > >> > > > > > > as > >> > >> > > > > > > > > key > >> > >> > > > > > > > > > > > words > >> > >> > > > > > > > > > > > > > for > >> > >> > > > > > > > > > > > > > > > > > definition is the target. > >> > >> > > > > > > > > > > > > > > > > > When it's not super complex the > >> latter > >> > >> can > >> > >> > be > >> > >> > > > > added > >> > >> > > > > > > > too. > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > BR, > >> > >> > > > > > > > > > > > > > > > > > G > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > On Sun, Mar 2, 2025 at 3:37 PM > >> Zakelly > >> > >> Lan > >> > >> > < > >> > >> > > > > > > > > > > > > zakelly....@gmail.com> > >> > >> > > > > > > > > > > > > > > > > wrote: > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > Hi Gabor, > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > +1 for this. > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > Will the metadata column use > >> > `METADATA > >> > >> > > > VIRTUAL` > >> > >> > > > > > as > >> > >> > > > > > > > key > >> > >> > > > > > > > > > > words > >> > >> > > > > > > > > > > > > for > >> > >> > > > > > > > > > > > > > > > > > > definition, or `METADATA FROM > xxx > >> > >> > VIRTUAL` > >> > >> > > > for > >> > >> > > > > > > > > renaming, > >> > >> > > > > > > > > > > just > >> > >> > > > > > > > > > > > > > like > >> > >> > > > > > > > > > > > > > > > the > >> > >> > > > > > > > > > > > > > > > > > > Kafka table? > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > Best, > >> > >> > > > > > > > > > > > > > > > > > > Zakelly > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > On Sat, Mar 1, 2025 at 1:31 PM > >> Gabor > >> > >> > > Somogyi > >> > >> > > > < > >> > >> > > > > > > > > > > > > > > > > gabor.g.somo...@gmail.com> > >> > >> > > > > > > > > > > > > > > > > > > wrote: > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > Hi All, > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > I'd like to start a > discussion > >> of > >> > >> > > FLIP-512: > >> > >> > > > > Add > >> > >> > > > > > > > meta > >> > >> > > > > > > > > > > > > > information > >> > >> > > > > > > > > > > > > > > to > >> > >> > > > > > > > > > > > > > > > > SQL > >> > >> > > > > > > > > > > > > > > > > > > > state connector [1]. > >> > >> > > > > > > > > > > > > > > > > > > > Feel free to add your > thoughts > >> to > >> > >> make > >> > >> > > this > >> > >> > > > > > > feature > >> > >> > > > > > > > > > > better. > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > [1] > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > >> > https://cwiki.apache.org/confluence/display/FLINK/FLIP-512%3A+Add+meta+information+to+SQL+state+connector > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > BR, > >> > >> > > > > > > > > > > > > > > > > > > > G > >> > >> > > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > >> > > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > >> > >> > > > > > > > > >> > >> > > > > > > > >> > >> > > > > > > >> > >> > > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > > > >> > > >> > > >