Many thanks for your reminder, Leonard. Here's the link I mentioned[1]. Best, Shengkai
[1] https://github.com/apache/flink/pull/26358 Leonard Xu <xbjt...@gmail.com> 于2025年3月27日周四 10:05写道: > Your link is broken, Shengkai > > Best, > Leonard > > > 2025年3月27日 10:01,Shengkai Fang <fskm...@gmail.com> 写道: > > > > 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 > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> > >