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

Reply via email to