SGTM For future reference, responding here:
5) Any operator can introduce system (psedo) columns. > > This is clearly out of scope for this FLIP. The implementation effort > would be huge and could introduce a lot of bugs. > I didn't imply any specific implementation or feature coverage in the currently proposed FLIP, but rather as a way to describe the semantics of system columns that those could be (but don't have to) introduced by any operator. Thanks, Alexey On Tue, Aug 22, 2023 at 2:18 PM Jing Ge <j...@ververica.com.invalid> wrote: > Hi Timo, > > Your last suggestion sounds good. > > Best regards, > Jing > > On Mon, Aug 21, 2023 at 4:21 AM Benchao Li <libenc...@apache.org> wrote: > > > It sounds good to me too, that we avoid introducing the concept of > "system > > columns" for now. > > > > Timo Walther <twal...@apache.org> 于2023年8月18日周五 22:38写道: > > > > > Great, I also like my last suggestion as it is even more elegant. I > will > > > update the FLIP until Monday. > > > > > > Regards, > > > Timo > > > > > > On 17.08.23 13:55, Jark Wu wrote: > > > > Hi Timo, > > > > > > > > I'm fine with your latest suggestion that introducing a flag to > control > > > > expanding behavior of metadata virtual columns, but not introducing > > > > any concept of system/pseudo columns for now. > > > > > > > > Best, > > > > Jark > > > > > > > > On Tue, 15 Aug 2023 at 23:25, Timo Walther <twal...@apache.org> > wrote: > > > > > > > >> Hi everyone, > > > >> > > > >> I would like to bump this thread up again. > > > >> > > > >> Esp. I would like to hear opinions on my latest suggestions to > simply > > > >> use METADATA VIRTUAL as system columns and only introduce a config > > > >> option for the SELECT * behavior. Implementation-wise this means > > minimal > > > >> effort and less new concepts. > > > >> > > > >> Looking forward to any kind of feedback. > > > >> > > > >> Thanks, > > > >> Timo > > > >> > > > >> On 07.08.23 12:07, Timo Walther wrote: > > > >>> Hi everyone, > > > >>> > > > >>> thanks for the various feedback and lively discussion. Sorry, for > the > > > >>> late reply as I was on vacation. Let me answer to some of the > topics: > > > >>> > > > >>> 1) Systems columns should not be shown with DESCRIBE statements > > > >>> > > > >>> This sounds fine to me. I will update the FLIP in the next > iteration. > > > >>> > > > >>> 2) Do you know why most SQL systems do not need any prefix with > their > > > >>> pseudo column? > > > >>> > > > >>> Because most systems do not have external catalogs or connectors. > And > > > >>> also the number of system columns is limited to a handful of > columns. > > > >>> Flink is more generic and thus more complex. And we have already > the > > > >>> concepts of metadata columns. We need to be careful with not > > > overloading > > > >>> our language. > > > >>> > > > >>> 3) Implementation details > > > >>> > > > >>> > how to you plan to implement the "system columns", do we need > to > > > add > > > >>> it to `RelNode` level? Or we just need to do it in the > > > >>> parsing/validating phase? > > > >>> > I'm not sure that Calcite's "system column" feature is fully > > ready > > > >>> > > > >>> My plan would be to only modify the parsing/validating phase. I > would > > > >>> like to avoid additional complexity in planner rules and > > > >>> connector/catalog interfaces. Metadata columns already support > > > >>> projection push down and are passed through the stack (via Schema, > > > >>> ResolvedSchema, SupportsReadableMetadata). Calcite's "system > column" > > > >>> feature is not fully ready yet and it would be a large effort > > > >>> potentially introducing bugs in supporting it. Thus, I'm proposing > to > > > >>> leverage what we already have. The only part that needs to be > > modified > > > >>> is the "expand star" method in SqlValidator and Table API. > > > >>> > > > >>> Queries such as `SELECT * FROM (SELECT $rowtime, * FROM t);` would > > show > > > >>> $rowtime as the expand star has only a special case when in the > scope > > > >>> for `FROM t`. All further subqueries treat it as a regular column. > > > >>> > > > >>> 4) Built-in defined pseudo-column "$rowtime" > > > >>> > > > >>> > Did you consider making it as a built-in defined pseudo-column > > > >>> "$rowtime" which returns the time attribute value (if exists) or > null > > > >>> (if non-exists) for every table/query, and pseudo-column > "$proctime" > > > >>> always returns PROCTIME() value for each table/query > > > >>> > > > >>> Built-in pseudo-columns mean that connector or catalog providers > need > > > >>> consensus in Flink which pseudo-columns should be built-in. We > should > > > >>> keep the concept generic and let platform providers decide which > > pseudo > > > >>> columns to expose. $rowtime might be obvious but others such as > > > >>> $partition or $offset are tricky to get consensus as every external > > > >>> connector works differently. Also a connector might want to expose > > > >>> different time semantics (such as ingestion time). > > > >>> > > > >>> 5) Any operator can introduce system (psedo) columns. > > > >>> > > > >>> This is clearly out of scope for this FLIP. The implementation > effort > > > >>> would be huge and could introduce a lot of bugs. > > > >>> > > > >>> 6) "Metadata Key Prefix Constraint" which is still a little complex > > > >>> > > > >>> Another option could be to drop the naming pattern constraint. We > > could > > > >>> make it configurable that METADATA VIRTUAL columns are never > selected > > > by > > > >>> default in SELECT * or visible in DESCRIBE. This would further > > simplify > > > >>> the FLIP and esp lower the impact on the planner and all > interfaces. > > > >>> > > > >>> What do you think about this? We could introduce a flag: > > > >>> > > > >>> table.expand-metadata-columns (better name to be defined) > > > >>> > > > >>> This way we don't need to introduce the concept of system columns > > yet, > > > >>> but can still offer similar functionality with minimal overhead in > > the > > > >>> code base. > > > >>> > > > >>> Regards, > > > >>> Timo > > > >>> > > > >>> > > > >>> > > > >>> > > > >>> On 04.08.23 23:06, Alexey Leonov-Vendrovskiy wrote: > > > >>>> Looks like both kinds of system columns can converge. > > > >>>> We can say that any operator can introduce system (psedo) columns. > > > >>>> > > > >>>> cc Eugene who is also interested in the subject. > > > >>>> > > > >>>> On Wed, Aug 2, 2023 at 1:03 AM Paul Lam <paullin3...@gmail.com> > > > wrote: > > > >>>> > > > >>>>> Hi Timo, > > > >>>>> > > > >>>>> Thanks for starting the discussion! System columns are no doubt a > > > >>>>> good boost on Flink SQL’s usability, and I see the feedbacks are > > > >>>>> mainly concerns about the accessibility of system columns. > > > >>>>> > > > >>>>> I think most of the concerns could be solved by clarifying the > > > >>>>> ownership of the system columns. Different from databases like > > > >>>>> Oracle/BigQuery/PG who owns the data/metadata, Flink uses the > > > >>>>> data/metadata from external systems. That means Flink could > > > >>>>> have 2 kinds of system columns (take ROWID for example): > > > >>>>> > > > >>>>> 1. system columns provided by external systems via catalogs, such > > > >>>>> as ROWID from the original system. > > > >>>>> 2. system columns generated by Flink, such as ROWID generated by > > > >>>>> Flink itself. > > > >>>>> > > > >>>>> IIUC, the FLIP is proposing the 1st approach: the catalog defines > > > what > > > >>>>> system columns to provide, and Flink treats them as normal > columns > > > >>>>> with a special naming pattern. > > > >>>>> > > > >>>>> On the other hand, Jark is proposing the 2nd one: the system > > columns > > > >>>>> are defined and owned by Flink, and can be inferred from external > > > >>>>> systems. Therefore, system columns should be predefined by Flink, > > > >>>>> and optionally implemented by the catalogs. > > > >>>>> > > > >>>>> Personally, I’m in favor of the 2nd approach, because it makes > the > > > >>>>> system columns very accessible and more aligned across the > > catalogs. > > > >>>>> > > > >>>>> BTW, I second Alexey that systems columns should not be shown > with > > > >>>>> DESCRIBE statements. > > > >>>>> > > > >>>>> WDYT? Thanks! > > > >>>>> > > > >>>>> Best, > > > >>>>> Paul Lam > > > >>>>> > > > >>>>>> 2023年7月31日 23:54,Jark Wu <imj...@gmail.com> 写道: > > > >>>>>> > > > >>>>>> Hi Timo, > > > >>>>>> > > > >>>>>> Thanks for your proposal. I think this is a nice feature for > users > > > >>>>>> and I > > > >>>>>> prefer option 3. > > > >>>>>> > > > >>>>>> I only have one concern about the concept of pseudo-column or > > > >>>>>> system-column, > > > >>>>>> because this is the first time we introduce it in Flink SQL. The > > > >>>>>> confusion is similar to the > > > >>>>>> question of Benchao and Sergey about the propagation of > > > pseudo-column. > > > >>>>>> > > > >>>>>> From my understanding, a pseudo-column can be get from an > > > arbitrary > > > >>>>> query, > > > >>>>>> just similar to > > > >>>>>> ROWNUM in Oracle[1], such as : > > > >>>>>> > > > >>>>>> SELECT * > > > >>>>>> FROM (SELECT * FROM employees ORDER BY employee_id) > > > >>>>>> WHERE ROWNUM < 11; > > > >>>>>> > > > >>>>>> However, IIUC, the proposed "$rowtime" pseudo-column can only be > > got > > > >>>>>> from > > > >>>>>> the physical table > > > >>>>>> and can't be got from queries even if the query propagates the > > > rowtime > > > >>>>>> attribute. There was also > > > >>>>>> a discussion about adding a pseudo-column "_proctime" [2] to > make > > > >>>>>> lookup > > > >>>>>> join easier to use > > > >>>>>> which can be got from arbitrary queries. That "_proctime" may > > > conflict > > > >>>>> with > > > >>>>>> the proposed > > > >>>>>> pseudo-column concept. > > > >>>>>> > > > >>>>>> Did you consider making it as a built-in defined pseudo-column > > > >>>>>> "$rowtime" > > > >>>>>> which returns the > > > >>>>>> time attribute value (if exists) or null (if non-exists) for > every > > > >>>>>> table/query, and pseudo-column > > > >>>>>> "$proctime" always returns PROCTIME() value for each > table/query. > > In > > > >>>>>> this > > > >>>>>> way, catalogs only need > > > >>>>>> to provide a default rowtime attribute and users can get it in > the > > > >> same > > > >>>>>> way. And we don't need > > > >>>>>> to introduce the contract interface of "Metadata Key Prefix > > > >> Constraint" > > > >>>>>> which is still a little complex > > > >>>>>> for users and devs to understand. > > > >>>>>> > > > >>>>>> Best, > > > >>>>>> Jark > > > >>>>>> > > > >>>>>> [1]: > > > >>>>>> > > > >>>>> > > > >> > > > > > > https://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns009.htm#SQLRF00255 > > > >>>>>> [2]: > > > https://lists.apache.org/thread/7ln106qxyw8sp7ljq40hs2p1lb1gdwj5 > > > >>>>>> > > > >>>>>> > > > >>>>>> > > > >>>>>> > > > >>>>>> On Fri, 28 Jul 2023 at 06:18, Alexey Leonov-Vendrovskiy < > > > >>>>>> vendrov...@gmail.com> wrote: > > > >>>>>> > > > >>>>>>>> > > > >>>>>>>> `SELECT * FROM (SELECT $rowtime, * FROM t);` > > > >>>>>>>> Am I right that it will show `$rowtime` in output ? > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Yes, all explicitly selected columns become a part of the > result > > > (and > > > >>>>>>> intermediate) schema, and hence propagate. > > > >>>>>>> > > > >>>>>>> On Thu, Jul 27, 2023 at 2:40 PM Alexey Leonov-Vendrovskiy < > > > >>>>>>> vendrov...@gmail.com> wrote: > > > >>>>>>> > > > >>>>>>>> Thank you, Timo, for starting this FLIP! > > > >>>>>>>> > > > >>>>>>>> I propose the following change: > > > >>>>>>>> > > > >>>>>>>> Remove the requirement that DESCRIBE need to show system > > columns. > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> Some concrete vendor specific catalog implementations might > > prefer > > > >>>>>>>> this > > > >>>>>>>> approach. > > > >>>>>>>> Usually the same system columns are available on all (or > family) > > > of > > > >>>>>>>> tables, and it can be easily captured in the documentation. > > > >>>>>>>> > > > >>>>>>>> For example, BigQuery does exactly this: there, pseudo-columns > > do > > > >> not > > > >>>>>>> show > > > >>>>>>>> up in the table schema in any place, but can be accessed via > > > >>>>>>>> reference. > > > >>>>>>>> > > > >>>>>>>> So I propose we: > > > >>>>>>>> a) Either we say that DESCRIBE doesn't show system columns, > > > >>>>>>>> b) Or leave this vendor-specific / or configurable via flag > (if > > > >>>>> needed). > > > >>>>>>>> > > > >>>>>>>> Regards, > > > >>>>>>>> Alexey > > > >>>>>>>> > > > >>>>>>>> On Thu, Jul 27, 2023 at 3:27 AM Sergey Nuyanzin < > > > >> snuyan...@gmail.com> > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>>>> Hi Timo, > > > >>>>>>>>> > > > >>>>>>>>> Thanks for the FLIP. > > > >>>>>>>>> I also tend to think that Option 3 is better. > > > >>>>>>>>> > > > >>>>>>>>> I would be also interested in a question mentioned by Benchao > > Li. > > > >>>>>>>>> And a similar question about nested queries like > > > >>>>>>>>> `SELECT * FROM (SELECT $rowtime, * FROM t);` > > > >>>>>>>>> Am I right that it will show `$rowtime` in output ? > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> On Thu, Jul 27, 2023 at 6:58 AM Benchao Li < > > libenc...@apache.org > > > > > > > >>>>>>> wrote: > > > >>>>>>>>> > > > >>>>>>>>>> Hi Timo, > > > >>>>>>>>>> > > > >>>>>>>>>> Thanks for the FLIP, I also like the idea and option 3 > sounds > > > >>>>>>>>>> good to > > > >>>>>>>>> me. > > > >>>>>>>>>> > > > >>>>>>>>>> I would like to discuss a case which is not mentioned in the > > > >>>>>>>>>> current > > > >>>>>>>>> FLIP. > > > >>>>>>>>>> How are the "System column"s expressed in intermediate > result, > > > >> e.g. > > > >>>>>>>>> Join? > > > >>>>>>>>>> E.g. `SELECT * FROM t1 JOIN t2`, I guess it should not > include > > > >>>>> "system > > > >>>>>>>>>> columns" from t1 and t2 as you proposed, and for `SELECT > > > >>>>>>>>>> t1.$rowtime, > > > >>>>>>> * > > > >>>>>>>>>> FROM t1 JOIN t2`, it should also be valid. > > > >>>>>>>>>> Then the question is how to you plan to implement the > "system > > > >>>>>>> columns", > > > >>>>>>>>> do > > > >>>>>>>>>> we need to add it to `RelNode` level? Or we just need to do > it > > > >>>>>>>>>> in the > > > >>>>>>>>>> parsing/validating phase? > > > >>>>>>>>>> I'm not sure that Calcite's "system column" feature is fully > > > ready > > > >>>>> for > > > >>>>>>>>> this > > > >>>>>>>>>> since the code about this part is imported from the earlier > > > >> project > > > >>>>>>>>> before > > > >>>>>>>>>> it gets into Apache, and has not been considered much in the > > > past > > > >>>>>>>>>> development. > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> Jing Ge <j...@ververica.com.invalid> 于2023年7月26日周三 00:01写 > > > >>>>>>>>>> 道: > > > >>>>>>>>>> > > > >>>>>>>>>>> Hi Timo, > > > >>>>>>>>>>> > > > >>>>>>>>>>> Thanks for your proposal. It is a very pragmatic feature. > > Among > > > >>>>>>>>>>> all > > > >>>>>>>>>> options > > > >>>>>>>>>>> in the FLIP, option 3 is one I prefer too and I'd like to > ask > > > >> some > > > >>>>>>>>>>> questions to understand your thoughts. > > > >>>>>>>>>>> > > > >>>>>>>>>>> 1. I did some research on pseudo columns, just out of > > > >>>>>>>>>>> curiosity, do > > > >>>>>>>>> you > > > >>>>>>>>>>> know why most SQL systems do not need any prefix with their > > > >> pseudo > > > >>>>>>>>>> column? > > > >>>>>>>>>>> 2. Some platform providers will use ${variable_name} to > > define > > > >>>>>>>>>>> their > > > >>>>>>>>> own > > > >>>>>>>>>>> configurations and allow them to be embedded into SQL > > scripts. > > > >>>>>>>>>>> Will > > > >>>>>>>>> there > > > >>>>>>>>>>> be any conflict with option 3? > > > >>>>>>>>>>> > > > >>>>>>>>>>> Best regards, > > > >>>>>>>>>>> Jing > > > >>>>>>>>>>> > > > >>>>>>>>>>> On Tue, Jul 25, 2023 at 7:00 PM Konstantin Knauf > > > >>>>>>>>>>> <kna...@apache.org > > > >>>>>>>> > > > >>>>>>>>>>> wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>>> Hi Timo, > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> this makes sense to me. Option 3 seems reasonable, too. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Cheers, > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Konstantin > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Am Di., 25. Juli 2023 um 12:53 Uhr schrieb Timo Walther < > > > >>>>>>>>>>>> twal...@apache.org > > > >>>>>>>>>>>>> : > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> Hi everyone, > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> I would like to start a discussion about introducing the > > > >> concept > > > >>>>>>>>> of > > > >>>>>>>>>>>>> "System Columns" in SQL and Table API. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> The subject sounds bigger than it actually is. Luckily, > > Flink > > > >>>>>>> SQL > > > >>>>>>>>>>>>> already exposes the concept of metadata columns. And this > > > >>>>>>>>> proposal is > > > >>>>>>>>>>>>> just a slight adjustment for how metadata columns can be > > used > > > >> as > > > >>>>>>>>>> system > > > >>>>>>>>>>>>> columns. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> The biggest problem of metadata columns currently is > that a > > > >>>>>>>>> catalog > > > >>>>>>>>>>>>> implementation can't provide them by default because they > > > would > > > >>>>>>>>>> affect > > > >>>>>>>>>>>>> `SELECT *` when adding another one. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Looking forward to your feedback on FLIP-348: > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>> > > > >>>>> > > > >> > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-348%3A+Support+System+Columns+in+SQL+and+Table+API > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Thanks, > > > >>>>>>>>>>>>> Timo > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> -- > > > >>>>>>>>>>>> https://twitter.com/snntrable > > > >>>>>>>>>>>> https://github.com/knaufk > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> -- > > > >>>>>>>>>> > > > >>>>>>>>>> Best, > > > >>>>>>>>>> Benchao Li > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> -- > > > >>>>>>>>> Best regards, > > > >>>>>>>>> Sergey > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>> > > > >>>>> > > > >>>> > > > >>> > > > >> > > > >> > > > > > > > > > > > > > > -- > > > > Best, > > Benchao Li > > >