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