Thanks Fabian, Rui and Jark for the nice discussion! It seems everyone involved in this discussion has reached a consensus.
I will start another vote thread later. Best, Leonard > 在 2020年8月24日,20:54,Fabian Hueske <fhue...@gmail.com> 写道: > > Hi everyone, > > Thanks for the good discussion! > > I'm fine keeping the names "event-time temporal join" and "processing-time > temporal join". > Also +1 for Rui's proposal using "versioned table" for versioned dynamic > table and "regular table" for regular dynamic table. > > Thanks, > Fabian > > > > Am Mo., 24. Aug. 2020 um 04:24 Uhr schrieb Jark Wu <imj...@gmail.com > <mailto:imj...@gmail.com>>: > I think we have to make some compromise here. Either updating the definition > of "temporal table", or extending the definition of "temporal join". > I'm also fine with Rui's proposal that "temporal join" can also work with a > regular table. > > Best, > Jark > > On Fri, 21 Aug 2020 at 23:49, Leonard Xu <xbjt...@gmail.com > <mailto:xbjt...@gmail.com>> wrote: > Thanks @Fabian @Jark @Rui for sharing your opinions. > > For the the small divergence about choose a temporal join name or temporal > table name, > I don't have strong inclination. > > Regarding to choose a different name for this join: > I agree with Jark and Rui to keep the existing "event-time temporal join" > and "processing-time temporal join". > > Regarding to name the "temporal table without versions/ latest-only temporal > table": > Although Flink has imported Temporal Table concept for users[1], I think > users are more familiar with dynamic table concept. > If we wouldn't like to import more temporal table concepts, Rui's proposal > using "versioned table" for versioned dynamic table and "regular table" for > regular dynamic table is fine to me. > > HDYT? @Fabian @Jark > > > Best > Leonard > [1]https://ci.apache.org/projects/flink/flink-docs-master/dev/table/streaming/temporal_tables.html > > <https://ci.apache.org/projects/flink/flink-docs-master/dev/table/streaming/temporal_tables.html> > > >> 在 2020年8月21日,14:18,Rui Li <lirui.fu...@gmail.com >> <mailto:lirui.fu...@gmail.com>> 写道: >> >> Hi guys, >> >> Just my two cents. >> >> I agree with Jark that we should use "event-time/processing-time temporal >> join" as the name for this join. >> >> But I'm not sure about the definition of "temporal table". >> >> Then the "temporal join" (i.e. FOR SYSTEM_TIME AS OF syntax) joins a >> non-temporal table, which also sounds like contradictions. >> >> Why would we require "temporal join" only joins a "temporal table", if the >> standard doesn't even define what is a "temporal table"? >> >> What about defining the term "temporal table" to be "a table is changing >> over time", the same as the "dynamic table". >> >> I'd prefer not to introduce another term if it has the same meaning as >> "dynamic table". >> >> I wonder whether it's possible to consider "temporal join" as a specific >> kind of join that may work with regular or versioned tables, instead >> of a join that requires a specific kind of table. >> >> On Fri, Aug 21, 2020 at 1:45 PM Jark Wu <imj...@gmail.com >> <mailto:imj...@gmail.com>> wrote: >> Hi everyone, >> >> Thank you for the great discussion @Leonard and @Fabian. >> >> Regarding to choose a different name for this join: >> >> From my point of view, I don't agree to introduce a new grammar called >> whatever "lookup join" or "version join", because: >> 1. "lookup" is a physical behavior not a logical concept. >> 2. The SQL standard has proposed temporal join and it fits Flink well with >> the event-time and processing-time attributes. >> 3. We already have so many different join grammer, e.g. "regular join", >> "interval join", "temporal join", and maybe "window join" in the future. >> It may confuse users when having more join concepts. >> >> So I think the existing "event-time temporal join" and "processing-time >> temporal join" work well and we should still use them. >> >> Regarding to the "temporal table without versions": >> >> I agree there are contradictions between "temporal table" and "temporal >> table without versions" if we think "temporal table" tracks full history. >> However, if we call "temporal table without versions" as a "regular table", >> not a kind of "temporal table". >> Then the "temporal join" (i.e. FOR SYSTEM_TIME AS OF syntax) joins a >> non-temporal table, which also sounds like contradictions. >> >> I also notice that in SQL Server, the "system-versioned temporal table" is a >> combination of "Temporal Table" (current data) and "History Table" [1]. >> The "Temporal Table" is the current data of the database which is the same >> as our definition of "temporal table without version". The documentation >> says: >> >> > This additional table is referred to as the history table, while the main >> > table that stores current (actual) row versions is referred to as the >> > current table or simply as the temporal table. >> >> Besides, SQL:2011 doesn't define the meaning of "temporal table" [2], so I >> think we can define the meaning ourselves. >> >> > Interestingly, SQL:2011 manages to provide this (system-versioned table) >> > support without actually defining or using the terms “temporal data” or >> > “temporal table”. >> >> What about defining the term "temporal table" to be "a table is changing >> over time", the same as the "dynamic table". >> A "versioned temporal table" is a special temporal table which tracks the >> full history of the changing table and supports point-in-time access. >> A regular temporal table only supports access to the current data (no >> earlier versions). >> >> In this way, the "temporal join" still makes sense, because the joined table >> is a "temporal table", and all the tables in Flink is "temporal table" (or >> dynamic table). >> >> Best, >> Jark >> >> [1]: >> https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-ver15#what-is-a-system-versioned-temporal-table >> >> <https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-ver15#what-is-a-system-versioned-temporal-table> >> [2]: >> https://cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf >> <https://cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf> >> >> >> >> >> >> >> On Thu, 20 Aug 2020 at 22:55, Fabian Hueske <fhue...@gmail.com >> <mailto:fhue...@gmail.com>> wrote: >> Hi everyone, >> >> Yes, just to help user distinguish the difference between versioned temporal >> table and latest-only temporal table. >> >> >> I don't think we help users to understand the differences if we invent new >> (IMO confusing) terms ("temporal table without version" or "latest-only >> temporal table") instead of using known terminology ("table"). >> >>> As I suggested before, it might make sense to choose a different name for >>> this join instead of using a fancy name for the tables such that the name >>> fits the name of the join. >> I think lookup join is a physical implementation of Processing-Time temporal >> table join, we can even offer a lookup join implementation for Event-time >> temporal table join if the external system support lookup history data. >> >> Versioned temporal table can be used in Event-time temporal table join, all >> temporal table(including versioned temporal tale and regular table) can be >> used in Processing-time temporal table join, >> lookup join is a kind of physical implementation of Processing-time >> temporal table join which lookups the external system’s data. >> >> >> Lookup Join was just a quick shot proposal without putting much thought into >> it, but a different name might help to solve the naming issue with "temporal >> table without versions". >> Another proposal would be "Version Join" or "Table Version Join". >> >> If we agree regular tables are temporal table, I tend to keep latest-only >> temporal table to clarify the temporal and version concept in regular table. >> >> >> In my understanding access to a table's history is the core property of >> temporal tables (that's also how temporal tables are defined for SQL Server >> [1] or PostgreSQL [2]). >> A "temporal table without versions"or "latest-only temporal table" is just a >> table. It does not have any other property than all the tables we've always >> dealt with. >> >> So I would say that there are temporal tables (for which earlier versions >> can be accessed) and just tables like those that our users have always used >> so far (for which there are no earlier versions). >> >> Maybe it's just me, but "temporal table without versions" or "latest-only >> temporal table" sound like contradictions to me, similar to "tiny >> skyscraper". >> >> How about we try to get a few more opinions on this? >> What do others think about this issue? >> >> >> Best >> Leonard >> >> >> Best, >> Fabian >> >> [1] >> https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-ver15 >> >> <https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-ver15> >> [2] https://pgxn.org/dist/temporal_tables/ >> <https://pgxn.org/dist/temporal_tables/> >> >> >>> Cheers, >>> Fabian >>> >>> Am Mi., 19. Aug. 2020 um 04:24 Uhr schrieb Leonard Xu <xbjt...@gmail.com >>> <mailto:xbjt...@gmail.com>>: >>> Thanks Fabian and Seth for the feedback >>> >>> I agree the name “temporal table without version” is less accurate because >>> this kind of temporal table has a latest version rather than has no version. >>> >>> How about “Latest-only temporal table” ? The related concept section >>> updated as following: >>> >>> Temporal Table: Temporal table is a table that evolves over time, rows in >>> temporal table are associated with one or more temporal periods. >>> Version: A temporal table can split into a set of versioned table >>> snapshots, the version in table snapshots represents the valid life circle >>> of rows, the start time and the end time of the valid period can be >>> assigned by users. >>> Versioned temporal table: If the row in temporal table can track its >>> history changes and visit its history versions, we called this kind of >>> temporal table as versioned temporal table. >>> Latest-only temporal table: If the row in temporal table can only track >>> its latest version, we called this kind of temporal table as latest-only >>> temporal table. The temporal table in lookup join can only track its latest >>> version and thus it's also a latest-only temporal table. >>> >>> Best >>> Leonard >>> >>>> 在 2020年8月19日,04:46,Seth Wiesman <sjwies...@gmail.com >>>> <mailto:sjwies...@gmail.com>> 写道: >>>> >>>> +1 to the updated design. >>>> >>>> I agree with Fabian that the naming of "temporal table without version" is >>>> a bit confusing but the actual semantics make sense to me. I think just >>>> saying its a Flink managed lookup join makes sense. >>>> >>>> Seth >>>> >>>> On Tue, Aug 18, 2020 at 3:07 PM Fabian Hueske <fhue...@gmail.com >>>> <mailto:fhue...@gmail.com>> wrote: >>>> >>>>> Thanks for the updated FLIP Leonard! >>>>> In my opinion this was an improvement. >>>>> So +1 for this design. >>>>> >>>>> I have just one remark regarding the terminology. >>>>> I find the term "Temporal Table without Version" somewhat confusing. >>>>> IMO, versions are the core principle of temporal tables and temporal >>>>> tables without versions don't make much sense to me. >>>>> >>>>> What makes such a table a "Temporal" table? Isn't it just a regular table? >>>>> If I understand the proposal correctly, "Temporal Tables without Version" >>>>> can only be used in processing time temporal table joins, because this >>>>> join >>>>> only requests the current version. >>>>> But all regular tables can be used in processing time (temporal) table >>>>> joins as well. >>>>> It's basically the same as a lookup join, with the only difference that >>>>> the table is maintained in Flink and not accessed in an external system >>>>> (for example via JDBC). >>>>> >>>>> Are "Temporal Tables without Version" called "Temporal" because they can >>>>> be used in "processing time temporal table joins" and due to its name this >>>>> join needs to join something that's called "Temporal"? >>>>> In that case, we might want to rename "processing time temporal table >>>>> joins" into something else that does not imply a versioning. >>>>> Maybe we can call them just lookup joins to avoid introducing another >>>>> term? >>>>> >>>>> Thanks, Fabian >>>>> >>>>> Am Di., 18. Aug. 2020 um 04:30 Uhr schrieb Rui Li <lirui.fu...@gmail.com >>>>> <mailto:lirui.fu...@gmail.com>>: >>>>> >>>>>> Thanks Leonard for the clarifications! >>>>>> >>>>>> On Mon, Aug 17, 2020 at 9:17 PM Leonard Xu <xbjt...@gmail.com >>>>>> <mailto:xbjt...@gmail.com>> wrote: >>>>>> >>>>>>> >>>>>>>> But are we still able to track different views of such a >>>>>>>> table through time, as rows are added/deleted to/from the table? >>>>>>> >>>>>>> Yes, in fact we support temporal table from changlog which contains all >>>>>>> possible message types(INSERT/UPDATE/DELETE). >>>>>>> >>>>>>>> For >>>>>>>> example, suppose I have an append-only table source with event-time >>>>>>> and PK, >>>>>>>> will I be allowed to do an event-time temporal join with this table? >>>>>>> Yes, I list some examples in the doc, the example versioned_rates3 is >>>>>>> this case exactly. >>>>>>> >>>>>>> Best >>>>>>> Leonard >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> On Wed, Aug 12, 2020 at 3:31 PM Leonard Xu <xbjt...@gmail.com >>>>>>>> <mailto:xbjt...@gmail.com> <mailto: >>>>>>> xbjt...@gmail.com <mailto:xbjt...@gmail.com>>> wrote: >>>>>>>> >>>>>>>>> Hi, all >>>>>>>>> >>>>>>>>> After a detailed offline discussion about the temporal table related >>>>>>>>> concept and behavior, we had a reliable solution and rejected several >>>>>>>>> alternatives. >>>>>>>>> Compared to rejected alternatives, the proposed approach is a more >>>>>>> unified >>>>>>>>> story and also friendly to user and current Flink framework. >>>>>>>>> I improved the FLIP[1] with the proposed approach and refactored the >>>>>>>>> document organization to make it clear enough. >>>>>>>>> >>>>>>>>> Please let me know if you have any concerns, I’m looking forward your >>>>>>>>> comments. >>>>>>>>> >>>>>>>>> >>>>>>>>> Best >>>>>>>>> Leonard >>>>>>>>> >>>>>>>>> [1] >>>>>>>>> >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>>>> < >>>>>>>>> >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>> < >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> 在 2020年8月4日,21:25,Leonard Xu <xbjt...@gmail.com >>>>>>>>>> <mailto:xbjt...@gmail.com> <mailto: >>>>>>> xbjt...@gmail.com <mailto:xbjt...@gmail.com>>> 写道: >>>>>>>>>> >>>>>>>>>> Hi, all >>>>>>>>>> >>>>>>>>>> I’ve updated the FLIP[1] with the terminology `ChangelogTime`. >>>>>>>>>> >>>>>>>>>> Best >>>>>>>>>> Leonard >>>>>>>>>> [1] >>>>>>>>> >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>> < >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>>> >>>>>>>>> < >>>>>>>>> >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>> < >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL >>>>>>> >>>>>>> <https://cwiki.apache.org/confluence/display/FLINK/FLIP-132+Temporal+Table+DDL> >>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> 在 2020年8月4日,20:58,Leonard Xu <xbjt...@gmail.com >>>>>>>>>>> <mailto:xbjt...@gmail.com> <mailto: >>>>>>> xbjt...@gmail.com <mailto:xbjt...@gmail.com>> <mailto: >>>>>>>>> xbjt...@gmail.com <mailto:xbjt...@gmail.com> >>>>>>>>> <mailto:xbjt...@gmail.com <mailto:xbjt...@gmail.com>>>> 写道: >>>>>>>>>>> >>>>>>>>>>> Hi, Timo >>>>>>>>>>> >>>>>>>>>>> Thanks for you response. >>>>>>>>>>> >>>>>>>>>>>> 1) Naming: Is operation time a good term for this concept? If I >>>>>>> read >>>>>>>>> "The operation time is the time when the changes happened in system." >>>>>>> or >>>>>>>>> "The system time of DML execution in database", why don't we call it >>>>>>>>> `ChangelogTime` or `SystemTime`? Introducing another terminology of >>>>>>> time in >>>>>>>>> Flink should be thought through. >>>>>>>>>>> >>>>>>>>>>> I agree that we should thought through. I have considered the name >>>>>>>>> `ChangelogTime` and `SystemTime` too, I don’t have strong opinion on >>>>>>> the >>>>>>>>> name. >>>>>>>>>>> >>>>>>>>>>> I proposed `operationTime` because most changelog comes from >>>>>>> Database >>>>>>>>> and we always called an action as `operation` rather than `change` in >>>>>>>>> Database, the operation time is easier to understand for database >>>>>>> users, >>>>>>>>> but it's more like a database terminology. >>>>>>>>>>> >>>>>>>>>>> For `SystemTime`, user may confuse which one does the system in >>>>>>>>> `SystemTime` represents? Flink, Database or CDC tool. Maybe it’s >>>>>>> not a >>>>>>>>> good name. >>>>>>>>>>> >>>>>>>>>>> `ChangelogTime` is a pretty choice which is more unified with >>>>>>> existed >>>>>>>>> terminology `Changelog` and `ChangelogMode`, so let me use >>>>>>> `ChangelogTime` >>>>>>>>> and I’ll update the FLIP. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> 2) Exposing it through `org.apache.flink.types.Row`: Shall we also >>>>>>>>> expose the concept of time through the user-level `Row` type? The >>>>>>> FLIP does >>>>>>>>> not mention this explictly. I think we can keep it as an internal >>>>>>> concept >>>>>>>>> but I just wanted to ask for clarification. >>>>>>>>>>> >>>>>>>>>>> Yes, I want to keep it as an internal concept, we have discussed >>>>>>> that >>>>>>>>> changelog time concept should be the third time concept(the other two >>>>>>> are >>>>>>>>> event-time and processing-time). It’s not easy for normal users(or to >>>>>>> help >>>>>>>>> normal users) understand the three concepts accurately, and I did not >>>>>>> find >>>>>>>>> a big enough scenario that user need to touch the changelog time for >>>>>>> now, >>>>>>>>> so I tend to do not expose the concept to users. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Best, >>>>>>>>>>> Leonard >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On 04.08.20 04:58, Leonard Xu wrote: >>>>>>>>>>>>> Thanks Konstantin, >>>>>>>>>>>>> Regarding your questions, hope my comments has address your >>>>>>> questions >>>>>>>>> and I also add a few explanation in the FLIP. >>>>>>>>>>>>> Thank you all for the feedback, >>>>>>>>>>>>> It seems everyone involved in this thread has reached a >>>>>>> consensus. >>>>>>>>>>>>> I will start a vote thread later. >>>>>>>>>>>>> Best, >>>>>>>>>>>>> Leonard >>>>>>>>>>>>>> 在 2020年8月3日,19:35,godfrey he <godfre...@gmail.com >>>>>>>>>>>>>> <mailto:godfre...@gmail.com> <mailto: >>>>>>> godfre...@gmail.com <mailto:godfre...@gmail.com>> <mailto: >>>>>>>>> godfre...@gmail.com <mailto:godfre...@gmail.com> >>>>>>>>> <mailto:godfre...@gmail.com <mailto:godfre...@gmail.com>>>> 写道: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks Lennard for driving this FLIP. >>>>>>>>>>>>>> Looks good to me. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best, >>>>>>>>>>>>>> Godfrey >>>>>>>>>>>>>> >>>>>>>>>>>>>> Jark Wu <imj...@gmail.com <mailto:imj...@gmail.com> >>>>>>>>>>>>>> <mailto:imj...@gmail.com <mailto:imj...@gmail.com>> <mailto: >>>>>>> imj...@gmail.com <mailto:imj...@gmail.com> <mailto:imj...@gmail.com >>>>>>> <mailto:imj...@gmail.com>>>> 于2020年8月3日周一 >>>>>>>>> 下午12:04写道: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks Leonard for the great FLIP. I think it is in very good >>>>>>> shape. >>>>>>>>>>>>>>> +1 to start a vote. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>> Jark >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Fri, 31 Jul 2020 at 17:56, Fabian Hueske <fhue...@gmail.com >>>>>>>>>>>>>>> <mailto:fhue...@gmail.com> >>>>>>> <mailto:fhue...@gmail.com <mailto:fhue...@gmail.com>> >>>>>>>>> <mailto:fhue...@gmail.com <mailto:fhue...@gmail.com> >>>>>>>>> <mailto:fhue...@gmail.com <mailto:fhue...@gmail.com>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Leonard, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks for this FLIP! >>>>>>>>>>>>>>>> Looks good from my side. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Cheers, Fabian >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Am Do., 30. Juli 2020 um 22:15 Uhr schrieb Seth Wiesman < >>>>>>>>>>>>>>>> sjwies...@gmail.com <mailto:sjwies...@gmail.com> >>>>>>>>>>>>>>>> <mailto:sjwies...@gmail.com <mailto:sjwies...@gmail.com>> >>>>>>>>>>>>>>>> <mailto: >>>>>>> sjwies...@gmail.com <mailto:sjwies...@gmail.com> >>>>>>> <mailto:sjwies...@gmail.com <mailto:sjwies...@gmail.com>>> >>>>>>>>>>>>>>>>> : >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi Leondard, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thank you for pushing this, I think the updated syntax looks >>>>>>>>> really >>>>>>>>>>>>>>> good >>>>>>>>>>>>>>>>> and the semantics make sense to me. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> +1 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Seth >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Wed, Jul 29, 2020 at 11:36 AM Leonard Xu < >>>>>>> xbjt...@gmail.com <mailto:xbjt...@gmail.com> <mailto:xbjt...@gmail.com >>>>>>> <mailto:xbjt...@gmail.com>> >>>>>>>>> <mailto:xbjt...@gmail.com <mailto:xbjt...@gmail.com> >>>>>>>>> <mailto:xbjt...@gmail.com <mailto:xbjt...@gmail.com>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi, Konstantin >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 1) A "Versioned Temporal Table DDL on source" can only be >>>>>>>>> joined >>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> PRIMARY KEY attribute, correct? >>>>>>>>>>>>>>>>>> Yes, the PRIMARY KEY would be join key. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 2) Isn't it the time attribute in the ORDER BY clause of the >>>>>>>>> VIEW >>>>>>>>>>>>>>>>>> definition that defines >>>>>>>>>>>>>>>>>>> whether a event-time or processing time temporal table join >>>>>>> is >>>>>>>>>>>>>>> used? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I think event-time or processing-time temporal table join >>>>>>>>> depends on >>>>>>>>>>>>>>>> fact >>>>>>>>>>>>>>>>>> table’s time attribute in temporal join rather than from >>>>>>> temporal >>>>>>>>>>>>>>> table >>>>>>>>>>>>>>>>>> side, the event-time or processing time in temporal table is >>>>>>> just >>>>>>>>>>>>>>> used >>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>> split the validity period of versioned snapshot of temporal >>>>>>>>> table. >>>>>>>>>>>>>>> The >>>>>>>>>>>>>>>>>> processing time attribute is not necessary for temporal >>>>>>> table >>>>>>>>>>>>>>> without >>>>>>>>>>>>>>>>>> version, only the primary key is required, the following >>>>>>> VIEW is >>>>>>>>> also >>>>>>>>>>>>>>>>> valid >>>>>>>>>>>>>>>>>> for temporal table without version. >>>>>>>>>>>>>>>>>> CREATE VIEW latest_rates AS >>>>>>>>>>>>>>>>>> SELECT currency, LAST_VALUE(rate) -- only keep the >>>>>>>>> latest >>>>>>>>>>>>>>>>>> version >>>>>>>>>>>>>>>>>> FROM rates >>>>>>>>>>>>>>>>>> GROUP BY currency; -- inferred >>>>>>> primary >>>>>>>>> key >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> 3) A "Versioned Temporal Table DDL on source" is always >>>>>>>>> versioned >>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>>> operation_time regardless of the lookup table attribute >>>>>>>>> (event-time >>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>> processing time attribute), correct? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Yes, the semantics of `FOR SYSTEM_TIME AS OF o.time` is >>>>>>> using the >>>>>>>>>>>>>>>> o.time >>>>>>>>>>>>>>>>>> value to lookup the version of the temporal table. >>>>>>>>>>>>>>>>>> For fact table has the processing time attribute, it means >>>>>>> only >>>>>>>>>>>>>>> lookup >>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> latest version of temporal table and we can do some >>>>>>> optimization >>>>>>>>> in >>>>>>>>>>>>>>>>>> implementation like only keep the latest version. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Best >>>>>>>>>>>>>>>>>> Leonard >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Best regards! >>>>>>>> Rui Li >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> Best regards! >>>>>> Rui Li >>>>>> >>>>> >>> >> >> >> >> -- >> Best regards! >> Rui Li >