Thanks, Hao,

Sounds good to me.

Best,
Jark

On Thu, 28 Mar 2024 at 01:02, Hao Li <h...@confluent.io.invalid> wrote:

> Hi Jark,
>
> I think we can start with supporting popular model providers such as
> openai, azureml, sagemaker for remote models.
>
> Thanks,
> Hao
>
> On Tue, Mar 26, 2024 at 8:15 PM Jark Wu <imj...@gmail.com> wrote:
>
> > Thanks for the PoC and updating,
> >
> > The final syntax looks good to me, at least it is a nice and concise
> first
> > step.
> >
> > SELECT f1, f2, label FROM
> >    ML_PREDICT(
> >      input => `my_data`,
> >      model => `my_cat`.`my_db`.`classifier_model`,
> >      args => DESCRIPTOR(f1, f2));
> >
> > Besides, what built-in models will we support in the FLIP? This might be
> > important
> > because it relates to what use cases can run with the new Flink version
> out
> > of the box.
> >
> > Best,
> > Jark
> >
> > On Wed, 27 Mar 2024 at 01:10, Hao Li <h...@confluent.io.invalid> wrote:
> >
> > > Hi Timo,
> > >
> > > Yeah. For `primary key` and `from table(...)` those are explicitly
> > matched
> > > in parser: [1].
> > >
> > > > SELECT f1, f2, label FROM
> > >    ML_PREDICT(
> > >      input => `my_data`,
> > >      model => `my_cat`.`my_db`.`classifier_model`,
> > >      args => DESCRIPTOR(f1, f2));
> > >
> > > This named argument syntax looks good to me. It can be supported
> together
> > > with
> > >
> > > SELECT f1, f2, label FROM ML_PREDICT(`my_data`,
> > > `my_cat`.`my_db`.`classifier_model`,DESCRIPTOR(f1, f2));
> > >
> > > Sure. Will let you know once updated the FLIP.
> > >
> > > [1]
> > >
> > >
> >
> https://github.com/confluentinc/flink/blob/release-1.18-confluent/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl#L814
> > >
> > > Thanks,
> > > Hao
> > >
> > > On Tue, Mar 26, 2024 at 4:15 AM Timo Walther <twal...@apache.org>
> wrote:
> > >
> > > > Hi Hao,
> > > >
> > > >  > `TABLE(my_data)` and `MODEL(my_cat.my_db.classifier_model)`
> doesn't
> > > >  > work since `TABLE` and `MODEL` are already key words
> > > >
> > > > This argument doesn't count. The parser supports introducing keywords
> > > > that are still non-reserved. For example, this enables using "key"
> for
> > > > both primary key and a column name:
> > > >
> > > > CREATE TABLE t (i INT PRIMARY KEY NOT ENFORCED)
> > > > WITH ('connector' = 'datagen');
> > > >
> > > > SELECT i AS key FROM t;
> > > >
> > > > I'm sure we will introduce `TABLE(my_data)` eventually as this is
> what
> > > > the standard dictates. But for now, let's use the most compact syntax
> > > > possible which is also in sync with Oracle.
> > > >
> > > > TLDR: We allow identifiers as arguments for PTFs which are expanded
> > with
> > > > catalog and database if necessary. Those identifier arguments
> translate
> > > > to catalog lookups for table and models. The ML_ functions will make
> > > > sure that the arguments are of correct type model or table.
> > > >
> > > > SELECT f1, f2, label FROM
> > > >    ML_PREDICT(
> > > >      input => `my_data`,
> > > >      model => `my_cat`.`my_db`.`classifier_model`,
> > > >      args => DESCRIPTOR(f1, f2));
> > > >
> > > > So this will allow us to also use in the future:
> > > >
> > > > SELECT * FROM poly_func(table1);
> > > >
> > > > Same support as Oracle [1]. Very concise.
> > > >
> > > > Let me know when you updated the FLIP for a final review before
> voting.
> > > >
> > > > Do others have additional objections?
> > > >
> > > > Regards,
> > > > Timo
> > > >
> > > > [1]
> > > >
> > > >
> > >
> >
> https://livesql.oracle.com/apex/livesql/file/content_HQK7TYEO0NHSJCDY3LN2ERDV6.html
> > > >
> > > >
> > > >
> > > > On 25.03.24 23:40, Hao Li wrote:
> > > > > Hi Timo,
> > > > >
> > > > >> Please double check if this is implementable with the current
> > stack. I
> > > > > fear the parser or validator might not like the "identifier"
> > argument?
> > > > >
> > > > > I checked this, currently the validator throws an exception trying
> to
> > > get
> > > > > the full qualifier name for `classifier_model`. But since
> > > > > `SqlValidatorImpl` is implemented in Flink, we should be able to
> fix
> > > > this.
> > > > > The only caveator is if not full model path is provided,
> > > > > the qualifier is interpreted as a column. We should be able to
> > special
> > > > > handle this by rewriting the `ml_predict` function to add the
> catalog
> > > and
> > > > > database name in `FlinkCalciteSqlValidator` though.
> > > > >
> > > > >> SELECT f1, f2, label FROM
> > > > >     ML_PREDICT(
> > > > >       TABLE `my_data`,
> > > > >       my_cat.my_db.classifier_model,
> > > > >       DESCRIPTOR(f1, f2))
> > > > >
> > > > > SELECT f1, f2, label FROM
> > > > >     ML_PREDICT(
> > > > >       input => TABLE `my_data`,
> > > > >       model => my_cat.my_db.classifier_model,
> > > > >       args => DESCRIPTOR(f1, f2))
> > > > >
> > > > > I verified these can be parsed. The problem is in validator for
> > > qualifier
> > > > > as mentioned above.
> > > > >
> > > > >> So the safest option would be the long-term solution:
> > > > >
> > > > > SELECT f1, f2, label FROM
> > > > >     ML_PREDICT(
> > > > >       input => TABLE(my_data),
> > > > >       model => MODEL(my_cat.my_db.classifier_model),
> > > > >       args => DESCRIPTOR(f1, f2))
> > > > >
> > > > > `TABLE(my_data)` and `MODEL(my_cat.my_db.classifier_model)` doesn't
> > > work
> > > > > since `TABLE` and `MODEL` are already key words in calcite used by
> > > > `CREATE
> > > > > TABLE`, `CREATE MODEL`. Changing to `model_name(...)` works and
> will
> > be
> > > > > treated as a function.
> > > > >
> > > > > So I think
> > > > >
> > > > > SELECT f1, f2, label FROM
> > > > >     ML_PREDICT(
> > > > >       input => TABLE `my_data`,
> > > > >       model => my_cat.my_db.classifier_model,
> > > > >       args => DESCRIPTOR(f1, f2))
> > > > > should be fine for now.
> > > > >
> > > > > For the syntax part:
> > > > > 1). Sounds good. We can drop model task and model kind from the
> > > > definition.
> > > > > They can be deduced from the options.
> > > > >
> > > > > 2). Sure. We can add temporary model
> > > > >
> > > > > 3). Make sense. We can use `show create model <name>` to display
> all
> > > > > information and `describe model <name>` to show input/output schema
> > > > >
> > > > > Thanks,
> > > > > Hao
> > > > >
> > > > > On Mon, Mar 25, 2024 at 3:21 PM Hao Li <h...@confluent.io> wrote:
> > > > >
> > > > >> Hi Ahmed,
> > > > >>
> > > > >> Looks like the feature freeze time for 1.20 release is June 15th.
> We
> > > can
> > > > >> definitely get the model DDL into 1.20. For predict and evaluate
> > > > functions,
> > > > >> if we can't get into the 1.20 release, we can get them into the
> 1.21
> > > > >> release for sure.
> > > > >>
> > > > >> Thanks,
> > > > >> Hao
> > > > >>
> > > > >>
> > > > >>
> > > > >> On Mon, Mar 25, 2024 at 1:25 AM Timo Walther <twal...@apache.org>
> > > > wrote:
> > > > >>
> > > > >>> Hi Jark and Hao,
> > > > >>>
> > > > >>> thanks for the information, Jark! Great that the Calcite
> community
> > > > >>> already fixed the problem for us. +1 to adopt the simplified
> syntax
> > > > >>> asap. Maybe even before we upgrade Calcite (i.e. copy over
> > classes),
> > > if
> > > > >>> upgrading Calcite is too much work right now?
> > > > >>>
> > > > >>>   > Is `DESCRIPTOR` a must in the syntax?
> > > > >>>
> > > > >>> Yes, we should still stick to the standard as much as possible
> and
> > > all
> > > > >>> vendors use DESCRIPTOR/COLUMNS for distinuishing columns vs.
> > literal
> > > > >>> arguments. So the final syntax of this discussion would be:
> > > > >>>
> > > > >>>
> > > > >>> SELECT f1, f2, label FROM
> > > > >>>     ML_PREDICT(TABLE `my_data`, `classifier_model`,
> DESCRIPTOR(f1,
> > > f2))
> > > > >>>
> > > > >>> SELECT * FROM
> > > > >>>     ML_EVALUATE(TABLE `eval_data`, `classifier_model`,
> > DESCRIPTOR(f1,
> > > > f2))
> > > > >>>
> > > > >>> Please double check if this is implementable with the current
> > stack.
> > > I
> > > > >>> fear the parser or validator might not like the "identifier"
> > > argument?
> > > > >>>
> > > > >>> Make sure that also these variations are supported:
> > > > >>>
> > > > >>> SELECT f1, f2, label FROM
> > > > >>>     ML_PREDICT(
> > > > >>>       TABLE `my_data`,
> > > > >>>       my_cat.my_db.classifier_model,
> > > > >>>       DESCRIPTOR(f1, f2))
> > > > >>>
> > > > >>> SELECT f1, f2, label FROM
> > > > >>>     ML_PREDICT(
> > > > >>>       input => TABLE `my_data`,
> > > > >>>       model => my_cat.my_db.classifier_model,
> > > > >>>       args => DESCRIPTOR(f1, f2))
> > > > >>>
> > > > >>> It might be safer and more future proof to wrap a MODEL()
> function
> > > > >>> around it. This would be more in sync with the standard that
> > actually
> > > > >>> still requires to put a TABLE() around the input argument:
> > > > >>>
> > > > >>> ML_PREDICT(TABLE(`my_data`) PARTITIONED BY c1 ORDERED BY c1,
> ....)
> > > > >>>
> > > > >>> So the safest option would be the long-term solution:
> > > > >>>
> > > > >>> SELECT f1, f2, label FROM
> > > > >>>     ML_PREDICT(
> > > > >>>       input => TABLE(my_data),
> > > > >>>       model => MODEL(my_cat.my_db.classifier_model),
> > > > >>>       args => DESCRIPTOR(f1, f2))
> > > > >>>
> > > > >>> But I'm fine with this if others have a strong opinion:
> > > > >>>
> > > > >>> SELECT f1, f2, label FROM
> > > > >>>     ML_PREDICT(
> > > > >>>       input => TABLE `my_data`,
> > > > >>>       model => my_cat.my_db.classifier_model,
> > > > >>>       args => DESCRIPTOR(f1, f2))
> > > > >>>
> > > > >>> Some feedback for the remainder of the FLIP:
> > > > >>>
> > > > >>> 1) Simplify catalog objects
> > > > >>>
> > > > >>> I would suggest to drop:
> > > > >>> CatalogModel.getModelKind()
> > > > >>> CatalogModel.getModelTask()
> > > > >>>
> > > > >>> A catalog object should fully resemble the DDL. And since the DDL
> > > puts
> > > > >>> those properties in the WITH clause, the catalog object should
> the
> > > same
> > > > >>> (i.e. put them into the `getModelOptions()`). Btw renaming this
> > > method
> > > > >>> to just `getOptions()` for consistency should be good as well.
> > > > >>> Internally, we can still provide enums for these frequently used
> > > > >>> classes. Similar to what we do in `FactoryUtil` for other
> > frequently
> > > > >>> used options.
> > > > >>>
> > > > >>> Remove `getDescription()` and `getDetailedDescription()`. They
> > were a
> > > > >>> mistake for CatalogTable and should actually be deprecated. They
> > got
> > > > >>> replaced by `getComment()` which is sufficient.
> > > > >>>
> > > > >>> 2) CREATE TEMPORARY MODEL is not supported.
> > > > >>>
> > > > >>> This is an unnecessary restriction. We should support temporary
> > > > versions
> > > > >>> of these catalog objects as well for consistency. Adding support
> > for
> > > > >>> this should be straightforward.
> > > > >>>
> > > > >>> 3) DESCRIBE | DESC } MODEL
> > [catalog_name.][database_name.]model_name
> > > > >>>
> > > > >>> I would suggest we support `SHOW CREATE MODEL` instead. Similar
> to
> > > > `SHOW
> > > > >>> CREATE TABLE`, this should show all properties. If we support
> > > `DESCRIBE
> > > > >>> MODEL` it should only list the input parameters similar to
> > `DESCRIBE
> > > > >>> TABLE` only shows the columns (not the WITH clause).
> > > > >>>
> > > > >>> Regards,
> > > > >>> Timo
> > > > >>>
> > > > >>>
> > > > >>> On 23.03.24 13:17, Ahmed Hamdy wrote:
> > > > >>>> Hi everyone,
> > > > >>>> +1 for this proposal, I believe it is very useful to the
> minimum,
> > It
> > > > >>> would
> > > > >>>> be great even having  "ML_PREDICT" and "ML_EVALUATE" as built-in
> > > PTFs
> > > > in
> > > > >>>> this FLIP as discussed.
> > > > >>>> IIUC this will be included in the 1.20 roadmap?
> > > > >>>> Best Regards
> > > > >>>> Ahmed Hamdy
> > > > >>>>
> > > > >>>>
> > > > >>>> On Fri, 22 Mar 2024 at 23:54, Hao Li <h...@confluent.io.invalid>
> > > > wrote:
> > > > >>>>
> > > > >>>>> Hi Timo and Jark,
> > > > >>>>>
> > > > >>>>> I agree Oracle's syntax seems concise and more descriptive. For
> > the
> > > > >>>>> built-in `ML_PREDICT` and `ML_EVALUATE` functions I agree with
> > Jark
> > > > we
> > > > >>> can
> > > > >>>>> support them as built-in PTF using `SqlTableFunction` for this
> > > FLIP.
> > > > >>> We can
> > > > >>>>> have a different FLIP discussing user defined PTF and adopt
> that
> > > > later
> > > > >>> for
> > > > >>>>> model functions later. To summarize, the current proposed
> syntax
> > is
> > > > >>>>>
> > > > >>>>> SELECT f1, f2, label FROM TABLE(ML_PREDICT(TABLE `my_data`,
> > > > >>>>> `classifier_model`, f1, f2))
> > > > >>>>>
> > > > >>>>> SELECT * FROM TABLE(ML_EVALUATE(TABLE `eval_data`,
> > > > `classifier_model`,
> > > > >>> f1,
> > > > >>>>> f2))
> > > > >>>>>
> > > > >>>>> Is `DESCRIPTOR` a must in the syntax? If so, it becomes
> > > > >>>>>
> > > > >>>>> SELECT f1, f2, label FROM TABLE(ML_PREDICT(TABLE `my_data`,
> > > > >>>>> `classifier_model`, DESCRIPTOR(f1), DESCRIPTOR(f2)))
> > > > >>>>>
> > > > >>>>> SELECT * FROM TABLE(ML_EVALUATE(TABLE `eval_data`,
> > > > `classifier_model`,
> > > > >>>>> DESCRIPTOR(f1), DESCRIPTOR(f2)))
> > > > >>>>>
> > > > >>>>> If Calcite supports dropping outer table keyword, it becomes
> > > > >>>>>
> > > > >>>>> SELECT f1, f2, label FROM ML_PREDICT(TABLE `my_data`,
> > > > >>> `classifier_model`,
> > > > >>>>> DESCRIPTOR(f1), DESCRIPTOR(f2))
> > > > >>>>>
> > > > >>>>> SELECT * FROM ML_EVALUATE(TABLE `eval_data`,
> `classifier_model`,
> > > > >>>>> DESCRIPTOR(
> > > > >>>>> f1), DESCRIPTOR(f2))
> > > > >>>>>
> > > > >>>>> Thanks,
> > > > >>>>> Hao
> > > > >>>>>
> > > > >>>>>
> > > > >>>>>
> > > > >>>>> On Fri, Mar 22, 2024 at 9:16 AM Jark Wu <imj...@gmail.com>
> > wrote:
> > > > >>>>>
> > > > >>>>>> Sorry, I mean we can bump the Calcite version if needed in
> Flink
> > > > 1.20.
> > > > >>>>>>
> > > > >>>>>> On Fri, 22 Mar 2024 at 22:19, Jark Wu <imj...@gmail.com>
> wrote:
> > > > >>>>>>
> > > > >>>>>>> Hi Timo,
> > > > >>>>>>>
> > > > >>>>>>> Introducing user-defined PTF is very useful in Flink, I'm +1
> > for
> > > > >>> this.
> > > > >>>>>>> But I think the ML model FLIP is not blocked by this, because
> > we
> > > > >>>>>>> can introduce ML_PREDICT and ML_EVALUATE as built-in PTFs
> > > > >>>>>>> just like TUMBLE/HOP. And support user-defined ML functions
> as
> > > > >>>>>>> a future FLIP.
> > > > >>>>>>>
> > > > >>>>>>> Regarding the simplified PTF syntax which reduces the outer
> > > TABLE()
> > > > >>>>>>> keyword,
> > > > >>>>>>> it seems it was just supported[1] by the Calcite community
> last
> > > > month
> > > > >>>>> and
> > > > >>>>>>> will be
> > > > >>>>>>> released in the next version (v1.37). The Calcite community
> is
> > > > >>>>> preparing
> > > > >>>>>>> the
> > > > >>>>>>> 1.37 release, so we can bump the version if needed in Flink
> > 1.19.
> > > > >>>>>>>
> > > > >>>>>>> Best,
> > > > >>>>>>> Jark
> > > > >>>>>>>
> > > > >>>>>>> [1]: https://issues.apache.org/jira/browse/CALCITE-6254
> > > > >>>>>>>
> > > > >>>>>>> On Fri, 22 Mar 2024 at 21:46, Timo Walther <
> twal...@apache.org
> > >
> > > > >>> wrote:
> > > > >>>>>>>
> > > > >>>>>>>> Hi everyone,
> > > > >>>>>>>>
> > > > >>>>>>>> this is a very important change to the Flink SQL syntax but
> we
> > > > can't
> > > > >>>>>>>> wait until the SQL standard is ready for this. So I'm +1 on
> > > > >>>>> introducing
> > > > >>>>>>>> the MODEL concept as a first class citizen in Flink.
> > > > >>>>>>>>
> > > > >>>>>>>> For your information: Over the past months I have already
> > spent
> > > a
> > > > >>>>>>>> significant amount of time thinking about how we can
> introduce
> > > > PTFs
> > > > >>> in
> > > > >>>>>>>> Flink. I reserved FLIP-440[1] for this purpose and I will
> > share
> > > a
> > > > >>>>>>>> version of this in the next 1-2 weeks.
> > > > >>>>>>>>
> > > > >>>>>>>> For a good implementation of FLIP-440 and also FLIP-437, we
> > > should
> > > > >>>>>>>> evolve the PTF syntax in collaboration with Apache Calcite.
> > > > >>>>>>>>
> > > > >>>>>>>> There are different syntax versions out there:
> > > > >>>>>>>>
> > > > >>>>>>>> 1) Flink
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT * FROM
> > > > >>>>>>>>      TABLE(TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL
> > '10'
> > > > >>>>> MINUTES));
> > > > >>>>>>>>
> > > > >>>>>>>> 2) SQL standard
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT * FROM
> > > > >>>>>>>>      TABLE(TUMBLE(TABLE(Bid), DESCRIPTOR(bidtime), INTERVAL
> > '10'
> > > > >>>>>> MINUTES));
> > > > >>>>>>>>
> > > > >>>>>>>> 3) Oracle
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT * FROM
> > > > >>>>>>>>       TUMBLE(Bid, COLUMNS(bidtime), INTERVAL '10' MINUTES));
> > > > >>>>>>>>
> > > > >>>>>>>> As you can see above, Flink does not follow the standard
> > > correctly
> > > > >>> as
> > > > >>>>> it
> > > > >>>>>>>> would need to use `TABLE()` but this is not provided by
> > Calcite
> > > > yet.
> > > > >>>>>>>>
> > > > >>>>>>>> I really like the Oracle syntax[2][3] a lot. It reduces
> > > necessary
> > > > >>>>>>>> keywords to a minimum. Personally, I would like to discuss
> > this
> > > > >>> syntax
> > > > >>>>>>>> in a separate FLIP and hope I will find supporters for:
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT * FROM
> > > > >>>>>>>>      TUMBLE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '10'
> > > > MINUTES);
> > > > >>>>>>>>
> > > > >>>>>>>> If we go entirely with the Oracle syntax, as you can see in
> > the
> > > > >>>>> example,
> > > > >>>>>>>> Oracle allows for passing identifiers directly. This would
> > solve
> > > > our
> > > > >>>>>>>> problems for the MODEL as well:
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT f1, f2, label FROM ML_PREDICT(
> > > > >>>>>>>>      data => `my_data`,
> > > > >>>>>>>>      model => `classifier_model`,
> > > > >>>>>>>>      input => DESCRIPTOR(f1, f2));
> > > > >>>>>>>>
> > > > >>>>>>>> Or we completely adopt the Oracle syntax:
> > > > >>>>>>>>
> > > > >>>>>>>> SELECT f1, f2, label FROM ML_PREDICT(
> > > > >>>>>>>>      data => `my_data`,
> > > > >>>>>>>>      model => `classifier_model`,
> > > > >>>>>>>>      input => COLUMNS(f1, f2));
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>> What do you think?
> > > > >>>>>>>>
> > > > >>>>>>>> Happy to create a FLIP for just this syntax question and
> > > > collaborate
> > > > >>>>>>>> with the Calcite community on this. Supporting the syntax of
> > > > Oracle
> > > > >>>>>>>> shouldn't be too hard to convince at least as parser
> > parameter.
> > > > >>>>>>>>
> > > > >>>>>>>> Regards,
> > > > >>>>>>>> Timo
> > > > >>>>>>>>
> > > > >>>>>>>> [1]
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/%5BWIP%5D+FLIP-440%3A+User-defined+Polymorphic+Table+Functions
> > > > >>>>>>>> [2]
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_TF.html#GUID-0F66E239-DE77-4C0E-AC76-D5B632AB8072
> > > > >>>>>>>> [3]
> > > > >>>>>>
> > > > https://oracle-base.com/articles/18c/polymorphic-table-functions-18c
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>> On 20.03.24 17:22, Mingge Deng wrote:
> > > > >>>>>>>>> Thanks Jark for all the insightful comments.
> > > > >>>>>>>>>
> > > > >>>>>>>>> We have updated the proposal per our offline discussions:
> > > > >>>>>>>>> 1. Model will be treated as a new relation in FlinkSQL.
> > > > >>>>>>>>> 2. Include the common ML predict and evaluate functions
> into
> > > the
> > > > >>>>> open
> > > > >>>>>>>>> source flink to complete the user journey.
> > > > >>>>>>>>>        And we should be able to extend the calcite
> > > > SqlTableFunction
> > > > >>> to
> > > > >>>>>>>> support
> > > > >>>>>>>>> these two ML functions.
> > > > >>>>>>>>>
> > > > >>>>>>>>> Best,
> > > > >>>>>>>>> Mingge
> > > > >>>>>>>>>
> > > > >>>>>>>>> On Mon, Mar 18, 2024 at 7:05 PM Jark Wu <imj...@gmail.com>
> > > > wrote:
> > > > >>>>>>>>>
> > > > >>>>>>>>>> Hi Hao,
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>> I meant how the table name
> > > > >>>>>>>>>> in window TVF gets translated to `SqlCallingBinding`.
> > Probably
> > > > we
> > > > >>>>>> need
> > > > >>>>>>>> to
> > > > >>>>>>>>>> fetch the table definition from the catalog somewhere. Do
> we
> > > > treat
> > > > >>>>>>>> those
> > > > >>>>>>>>>> window TVF specially in parser/planner so that catalog is
> > > looked
> > > > >>> up
> > > > >>>>>>>> when
> > > > >>>>>>>>>> they are seen?
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> The table names are resolved and validated by Calcite
> > > > >>> SqlValidator.
> > > > >>>>>> We
> > > > >>>>>>>>>> don' need to fetch from catalog manually.
> > > > >>>>>>>>>> The specific checking logic of cumulate window happens in
> > > > >>>>>>>>>>
> > > SqlCumulateTableFunction.OperandMetadataImpl#checkOperandTypes.
> > > > >>>>>>>>>> The return type of SqlCumulateTableFunction is defined in
> > > > >>>>>>>>>> #getRowTypeInference() method.
> > > > >>>>>>>>>> Both are public interfaces provided by Calcite and it
> seems
> > > it's
> > > > >>>>> not
> > > > >>>>>>>>>> specially handled in parser/planner.
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> I didn't try that, but my gut feeling is that the
> framework
> > is
> > > > >>>>> ready
> > > > >>>>>> to
> > > > >>>>>>>>>> extend a customized TVF.
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>> For what model is, I'm wondering if it has to be datatype
> > or
> > > > >>>>>> relation.
> > > > >>>>>>>>>> Can
> > > > >>>>>>>>>> it be another kind of citizen parallel to
> > > > >>>>>>>> datatype/relation/function/db?
> > > > >>>>>>>>>> Redshift also supports `show models` operation, so it
> seems
> > > it's
> > > > >>>>>>>> treated
> > > > >>>>>>>>>> specially as well?
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> If it is an entity only used in catalog scope (e.g., show
> > xxx,
> > > > >>>>> create
> > > > >>>>>>>> xxx,
> > > > >>>>>>>>>> drop xxx), it is fine to introduce it.
> > > > >>>>>>>>>> We have introduced such one before, called Module: "load
> > > > module",
> > > > >>>>>> "show
> > > > >>>>>>>>>> modules" [1].
> > > > >>>>>>>>>> But if we want to use Model in TVF parameters, it means it
> > has
> > > > to
> > > > >>>>> be
> > > > >>>>>> a
> > > > >>>>>>>>>> relation or datatype, because
> > > > >>>>>>>>>> that is what it only accepts now.
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> Thanks for sharing the reason of preferring TVF instead of
> > > > >>> Redshift
> > > > >>>>>>>> way. It
> > > > >>>>>>>>>> sounds reasonable to me.
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> Best,
> > > > >>>>>>>>>> Jark
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>     [1]:
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/modules/
> > > > >>>>>>>>>>
> > > > >>>>>>>>>> On Fri, 15 Mar 2024 at 13:41, Hao Li
> > <h...@confluent.io.invalid
> > > >
> > > > >>>>>> wrote:
> > > > >>>>>>>>>>
> > > > >>>>>>>>>>> Hi Jark,
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>> Thanks for the pointer. Sorry for the confusion: I meant
> > how
> > > > the
> > > > >>>>>> table
> > > > >>>>>>>>>> name
> > > > >>>>>>>>>>> in window TVF gets translated to `SqlCallingBinding`.
> > > Probably
> > > > we
> > > > >>>>>>>> need to
> > > > >>>>>>>>>>> fetch the table definition from the catalog somewhere. Do
> > we
> > > > >>> treat
> > > > >>>>>>>> those
> > > > >>>>>>>>>>> window TVF specially in parser/planner so that catalog is
> > > > looked
> > > > >>>>> up
> > > > >>>>>>>> when
> > > > >>>>>>>>>>> they are seen?
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>> For what model is, I'm wondering if it has to be datatype
> > or
> > > > >>>>>> relation.
> > > > >>>>>>>>>> Can
> > > > >>>>>>>>>>> it be another kind of citizen parallel to
> > > > >>>>>>>> datatype/relation/function/db?
> > > > >>>>>>>>>>> Redshift also supports `show models` operation, so it
> seems
> > > > it's
> > > > >>>>>>>> treated
> > > > >>>>>>>>>>> specially as well? The reasons I don't like Redshift's
> > syntax
> > > > >>> are:
> > > > >>>>>>>>>>> 1. It's a bit verbose, you need to think of a model name
> as
> > > > well
> > > > >>>>> as
> > > > >>>>>> a
> > > > >>>>>>>>>>> function name and the function name also needs to be
> > unique.
> > > > >>>>>>>>>>> 2. More importantly, prediction function isn't the only
> > > > function
> > > > >>>>>> that
> > > > >>>>>>>> can
> > > > >>>>>>>>>>> operate on models. There could be a set of inference
> > > functions
> > > > >>> [1]
> > > > >>>>>> and
> > > > >>>>>>>>>>> evaluation functions [2] which can operate on models.
> It's
> > > hard
> > > > >>> to
> > > > >>>>>>>>>> specify
> > > > >>>>>>>>>>> all of them in model creation.
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>> [1]:
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-predict
> > > > >>>>>>>>>>> [2]:
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-evaluate
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>> Thanks,
> > > > >>>>>>>>>>> Hao
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>> On Thu, Mar 14, 2024 at 8:18 PM Jark Wu <
> imj...@gmail.com>
> > > > >>> wrote:
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>>> Hi Hao,
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>>> Can you send me some pointers
> > > > >>>>>>>>>>>> where the function gets the table information?
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> Here is the code of cumulate window type checking [1].
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>>> Also is it possible to support <query_stmt> in
> > > > >>>>>>>>>>>> window functions in addiction to table?
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> Yes. It is not allowed in TVF.
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> Thanks for the syntax links of other systems. The
> reason I
> > > > >>> prefer
> > > > >>>>>> the
> > > > >>>>>>>>>>>> Redshift way is
> > > > >>>>>>>>>>>> that it avoids introducing Model as a relation or
> datatype
> > > > >>>>>>>> (referenced
> > > > >>>>>>>>>>> as a
> > > > >>>>>>>>>>>> parameter in TVF).
> > > > >>>>>>>>>>>> Model is not a relation because it can be queried
> directly
> > > > >>> (e.g.,
> > > > >>>>>>>>>> SELECT
> > > > >>>>>>>>>>> *
> > > > >>>>>>>>>>>> FROM model).
> > > > >>>>>>>>>>>> I'm also confused about making Model as a datatype,
> > because
> > > I
> > > > >>>>> don't
> > > > >>>>>>>>>> know
> > > > >>>>>>>>>>>> what class the
> > > > >>>>>>>>>>>> model parameter of the eval method of
> > > > >>>>> TableFunction/ScalarFunction
> > > > >>>>>>>>>> should
> > > > >>>>>>>>>>>> be. By defining
> > > > >>>>>>>>>>>> the function with the model, users can directly invoke
> the
> > > > >>>>> function
> > > > >>>>>>>>>>> without
> > > > >>>>>>>>>>>> reference to the model name.
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> Best,
> > > > >>>>>>>>>>>> Jark
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> [1]:
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://github.com/apache/flink/blob/d6c7eee8243b4fe3e593698f250643534dc79cb5/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/SqlCumulateTableFunction.java#L53
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>> On Fri, 15 Mar 2024 at 02:48, Hao Li
> > > <h...@confluent.io.invalid
> > > > >
> > > > >>>>>>>> wrote:
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>>> Hi Jark,
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> Thanks for the pointers. It's very helpful.
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> 1. Looks like `tumble`, `hopping` are keywords in
> calcite
> > > > >>>>> parser.
> > > > >>>>>>>> And
> > > > >>>>>>>>>>> the
> > > > >>>>>>>>>>>>> syntax `cumulate(Table my_table, ...)` needs to get
> table
> > > > >>>>>>>> information
> > > > >>>>>>>>>>>> from
> > > > >>>>>>>>>>>>> catalog somewhere for type validation etc. Can you send
> > me
> > > > some
> > > > >>>>>>>>>>> pointers
> > > > >>>>>>>>>>>>> where the function gets the table information?
> > > > >>>>>>>>>>>>> 2. The ideal syntax for model function I think would be
> > > > >>>>>>>>>>> `ML_PREDICT(MODEL
> > > > >>>>>>>>>>>>> <model_name>, {table <table_name> | (query_stmt) })`. I
> > > think
> > > > >>>>> with
> > > > >>>>>>>>>>>> special
> > > > >>>>>>>>>>>>> handling of the `ML_PREDICT` function in
> parser/planner,
> > > > maybe
> > > > >>>>> we
> > > > >>>>>>>> can
> > > > >>>>>>>>>>> do
> > > > >>>>>>>>>>>>> this like window functions. But to support `MODEL`
> > keyword,
> > > > we
> > > > >>>>>> need
> > > > >>>>>>>>>>>> calcite
> > > > >>>>>>>>>>>>> parser change I guess. Also is it possible to support
> > > > >>>>> <query_stmt>
> > > > >>>>>>>> in
> > > > >>>>>>>>>>>>> window functions in addiction to table?
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> For the redshift syntax, I'm not sure the purpose of
> > > defining
> > > > >>>>> the
> > > > >>>>>>>>>>>> function
> > > > >>>>>>>>>>>>> name with the model. Is it to define the function
> > > > input/output
> > > > >>>>>>>>>> schema?
> > > > >>>>>>>>>>> We
> > > > >>>>>>>>>>>>> have the schema in our create model syntax and the
> > > > `ML_PREDICT`
> > > > >>>>>> can
> > > > >>>>>>>>>>>> handle
> > > > >>>>>>>>>>>>> it by getting model definition. I think our syntax is
> > more
> > > > >>>>> concise
> > > > >>>>>>>> to
> > > > >>>>>>>>>>>> have
> > > > >>>>>>>>>>>>> a generic prediction function. I also did some research
> > and
> > > > >>> it's
> > > > >>>>>> the
> > > > >>>>>>>>>>>> syntax
> > > > >>>>>>>>>>>>> used by Databricks `ai_query` [1], Snowflake `predict`
> > [2],
> > > > >>>>>> Azureml
> > > > >>>>>>>>>>>>> `predict` [3].
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> [1]:
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://docs.databricks.com/en/sql/language-manual/functions/ai_query.html
> > > > >>>>>>>>>>>>> [2]:
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://github.com/Snowflake-Labs/sfguide-intro-to-machine-learning-with-snowpark-ml-for-python/blob/main/3_snowpark_ml_model_training_inference.ipynb?_fsi=sksXUwQ0
> > > > >>>>>>>>>>>>> [3]:
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://learn.microsoft.com/en-us/sql/machine-learning/tutorials/quickstart-python-train-score-model?view=azuresqldb-mi-current
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> Thanks,
> > > > >>>>>>>>>>>>> Hao
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>> On Wed, Mar 13, 2024 at 8:57 PM Jark Wu <
> > imj...@gmail.com>
> > > > >>>>> wrote:
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> Hi Mingge, Hao,
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> Thanks for your replies.
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> PTF is actually the ideal approach for model
> functions,
> > > and
> > > > >>> we
> > > > >>>>>> do
> > > > >>>>>>>>>>>> have
> > > > >>>>>>>>>>>>>> the plans to use PTF for
> > > > >>>>>>>>>>>>>> all model functions (including prediction, evaluation
> > > etc..)
> > > > >>>>> once
> > > > >>>>>>>>>> the
> > > > >>>>>>>>>>>> PTF
> > > > >>>>>>>>>>>>>> is supported in FlinkSQL
> > > > >>>>>>>>>>>>>> confluent extension.
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> It sounds that PTF is the ideal way and table function
> > is
> > > a
> > > > >>>>>>>>>> temporary
> > > > >>>>>>>>>>>>>> solution which will be dropped in the future.
> > > > >>>>>>>>>>>>>> I'm not sure whether we can implement it using PTF in
> > > Flink
> > > > >>>>> SQL.
> > > > >>>>>>>>>> But
> > > > >>>>>>>>>>> we
> > > > >>>>>>>>>>>>>> have implemented window
> > > > >>>>>>>>>>>>>> functions using PTF[1]. And introduced a new window
> > > function
> > > > >>>>>>>>>> (called
> > > > >>>>>>>>>>>>>> CUMULATE[2]) in Flink SQL based
> > > > >>>>>>>>>>>>>> on this. I think it might work to use PTF and
> implement
> > > > model
> > > > >>>>>>>>>>> function
> > > > >>>>>>>>>>>>>> syntax like this:
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> SELECT * FROM TABLE(ML_PREDICT(
> > > > >>>>>>>>>>>>>>      TABLE my_table,
> > > > >>>>>>>>>>>>>>      my_model,
> > > > >>>>>>>>>>>>>>      col1,
> > > > >>>>>>>>>>>>>>      col2
> > > > >>>>>>>>>>>>>> ));
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> Besides, did you consider following the way of AWS
> > > Redshift
> > > > >>>>> which
> > > > >>>>>>>>>>>> defines
> > > > >>>>>>>>>>>>>> model function with the model itself together?
> > > > >>>>>>>>>>>>>> IIUC, a model is a black-box which defines input
> > > parameters
> > > > >>> and
> > > > >>>>>>>>>>> output
> > > > >>>>>>>>>>>>>> parameters which can be modeled into functions.
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> Best,
> > > > >>>>>>>>>>>>>> Jark
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> [1]:
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/window-tvf/#session
> > > > >>>>>>>>>>>>>> [2]:
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-145%3A+Support+SQL+windowing+table-valued+function#FLIP145:SupportSQLwindowingtablevaluedfunction-CumulatingWindows
> > > > >>>>>>>>>>>>>> [3]:
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://github.com/aws-samples/amazon-redshift-ml-getting-started/blob/main/use-cases/bring-your-own-model-remote-inference/README.md#create-model
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>> On Wed, 13 Mar 2024 at 15:00, Hao Li
> > > > <h...@confluent.io.invalid
> > > > >>>>>>
> > > > >>>>>>>>>>> wrote:
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> Hi Jark,
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> Thanks for your questions. These are good questions!
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> 1. The polymorphism table function I was referring to
> > > > takes a
> > > > >>>>>>>>>> table
> > > > >>>>>>>>>>>> as
> > > > >>>>>>>>>>>>>>> input and outputs a table. So the syntax would be
> like
> > > > >>>>>>>>>>>>>>> ```
> > > > >>>>>>>>>>>>>>> SELECT * FROM ML_PREDICT('model', (SELECT * FROM
> > > my_table))
> > > > >>>>>>>>>>>>>>> ```
> > > > >>>>>>>>>>>>>>> As far as I know, this is not supported yet on Flink.
> > So
> > > > >>>>> before
> > > > >>>>>>>>>>> it's
> > > > >>>>>>>>>>>>>>> supported, one option for the predict function is
> using
> > > > table
> > > > >>>>>>>>>>>> function
> > > > >>>>>>>>>>>>>>> which can output multiple columns
> > > > >>>>>>>>>>>>>>> ```
> > > > >>>>>>>>>>>>>>> SELECT * FROM my_table, LATERAL VIEW
> > (ML_PREDICT('model',
> > > > >>>>> col1,
> > > > >>>>>>>>>>>> col2))
> > > > >>>>>>>>>>>>>>> ```
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> 2. Good question. Type inference is hard for the
> > > > `ML_PREDICT`
> > > > >>>>>>>>>>>> function
> > > > >>>>>>>>>>>>>>> because it takes a model name string as input. I can
> > > think
> > > > of
> > > > >>>>>>>>>> three
> > > > >>>>>>>>>>>>> ways
> > > > >>>>>>>>>>>>>> of
> > > > >>>>>>>>>>>>>>> doing type inference for it.
> > > > >>>>>>>>>>>>>>>       1). Treat `ML_PREDICT` function as something
> > > special
> > > > and
> > > > >>>>>>>>>> during
> > > > >>>>>>>>>>>> sql
> > > > >>>>>>>>>>>>>>> parsing or planning time, if it's encountered, we
> need
> > to
> > > > >>> look
> > > > >>>>>> up
> > > > >>>>>>>>>>> the
> > > > >>>>>>>>>>>>>> model
> > > > >>>>>>>>>>>>>>> from the first argument which is a model name from
> > > catalog.
> > > > >>>>> Then
> > > > >>>>>>>>>> we
> > > > >>>>>>>>>>>> can
> > > > >>>>>>>>>>>>>>> infer the input/output for the function.
> > > > >>>>>>>>>>>>>>>       2). We can define a `model` keyword and use
> that
> > in
> > > > the
> > > > >>>>>>>>>> predict
> > > > >>>>>>>>>>>>>> function
> > > > >>>>>>>>>>>>>>> to indicate the argument refers to a model. So it's
> > like
> > > > >>>>>>>>>>>>>> `ML_PREDICT(model
> > > > >>>>>>>>>>>>>>> 'my_model', col1, col2))`
> > > > >>>>>>>>>>>>>>>       3). We can create a special type of table
> > function
> > > > maybe
> > > > >>>>>>>>>> called
> > > > >>>>>>>>>>>>>>> `ModelFunction` which can resolve the model type
> > > inference
> > > > by
> > > > >>>>>>>>>>> special
> > > > >>>>>>>>>>>>>>> handling it during parsing or planning time.
> > > > >>>>>>>>>>>>>>> 1) is hacky, 2) isn't supported in Flink for
> function,
> > 3)
> > > > >>>>> might
> > > > >>>>>>>>>> be
> > > > >>>>>>>>>>> a
> > > > >>>>>>>>>>>>>>> good option.
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> 3. I sketched the `ML_PREDICT` function for
> inference.
> > > But
> > > > >>>>> there
> > > > >>>>>>>>>>> are
> > > > >>>>>>>>>>>>>>> limitations of the function mentioned in 1 and 2. So
> > > maybe
> > > > we
> > > > >>>>>>>>>> don't
> > > > >>>>>>>>>>>>> need
> > > > >>>>>>>>>>>>>> to
> > > > >>>>>>>>>>>>>>> introduce them as built-in functions until
> polymorphism
> > > > table
> > > > >>>>>>>>>>>> function
> > > > >>>>>>>>>>>>>> and
> > > > >>>>>>>>>>>>>>> we can properly deal with type inference.
> > > > >>>>>>>>>>>>>>> After that, defining a user-defined model function
> > should
> > > > >>> also
> > > > >>>>>> be
> > > > >>>>>>>>>>>>>>> straightforward.
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> 4. For model types, do you mean 'remote', 'import',
> > > > 'native'
> > > > >>>>>>>>>> models
> > > > >>>>>>>>>>>> or
> > > > >>>>>>>>>>>>>>> other things?
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> 5. We could support popular providers such as
> > 'azureml',
> > > > >>>>>>>>>>> 'vertexai',
> > > > >>>>>>>>>>>>>>> 'googleai' as long as we support the `ML_PREDICT`
> > > function.
> > > > >>>>>> Users
> > > > >>>>>>>>>>>>> should
> > > > >>>>>>>>>>>>>> be
> > > > >>>>>>>>>>>>>>> able to implement 3rd-party providers if they can
> > > > implement a
> > > > >>>>>>>>>>>> function
> > > > >>>>>>>>>>>>>>> handling the input/output for the provider.
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> I think for the model functions, there are still
> > > > dependencies
> > > > >>>>> or
> > > > >>>>>>>>>>>> hacks
> > > > >>>>>>>>>>>>> we
> > > > >>>>>>>>>>>>>>> need to sort out as a built-in function. Maybe we can
> > > > >>> separate
> > > > >>>>>>>>>> that
> > > > >>>>>>>>>>>> as
> > > > >>>>>>>>>>>>> a
> > > > >>>>>>>>>>>>>>> follow up if we want to have it built-in and focus on
> > the
> > > > >>>>> model
> > > > >>>>>>>>>>>> syntax
> > > > >>>>>>>>>>>>>> for
> > > > >>>>>>>>>>>>>>> this FLIP?
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> Thanks,
> > > > >>>>>>>>>>>>>>> Hao
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>> On Tue, Mar 12, 2024 at 10:33 PM Jark Wu <
> > > imj...@gmail.com
> > > > >
> > > > >>>>>>>>>> wrote:
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> Hi Minge, Chris, Hao,
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> Thanks for proposing this interesting idea. I think
> > this
> > > > is
> > > > >>> a
> > > > >>>>>>>>>>> nice
> > > > >>>>>>>>>>>>> step
> > > > >>>>>>>>>>>>>>>> towards
> > > > >>>>>>>>>>>>>>>> the AI world for Apache Flink. I don't know much
> about
> > > > >>> AI/ML,
> > > > >>>>>>>>>> so
> > > > >>>>>>>>>>> I
> > > > >>>>>>>>>>>>> may
> > > > >>>>>>>>>>>>>>> have
> > > > >>>>>>>>>>>>>>>> some stupid questions.
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> 1. Could you tell more about why polymorphism table
> > > > function
> > > > >>>>>>>>>>> (PTF)
> > > > >>>>>>>>>>>>>>> doesn't
> > > > >>>>>>>>>>>>>>>> work and do we have plan to use PTF as model
> > functions?
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> 2. What kind of object does the model map to in
> SQL? A
> > > > >>>>> relation
> > > > >>>>>>>>>>> or
> > > > >>>>>>>>>>>> a
> > > > >>>>>>>>>>>>>> data
> > > > >>>>>>>>>>>>>>>> type?
> > > > >>>>>>>>>>>>>>>> It looks like a data type because we use it as a
> > > parameter
> > > > >>> of
> > > > >>>>>>>>>> the
> > > > >>>>>>>>>>>>> table
> > > > >>>>>>>>>>>>>>>> function.
> > > > >>>>>>>>>>>>>>>> If it is a data type, how does it cooperate with
> type
> > > > >>>>>>>>>>> inference[1]?
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> 3. What built-in model functions will we support?
> How
> > to
> > > > >>>>>>>>>> define a
> > > > >>>>>>>>>>>>>>>> user-defined model function?
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> 4. What built-in model types will we support? How to
> > > > define
> > > > >>> a
> > > > >>>>>>>>>>>>>>> user-defined
> > > > >>>>>>>>>>>>>>>> model type?
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> 5. Regarding the remote model, what providers will
> we
> > > > >>>>> support?
> > > > >>>>>>>>>>> Can
> > > > >>>>>>>>>>>>>> users
> > > > >>>>>>>>>>>>>>>> implement
> > > > >>>>>>>>>>>>>>>> 3rd-party providers except OpenAI?
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> Best,
> > > > >>>>>>>>>>>>>>>> Jark
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> [1]:
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/functions/udfs/#type-inference
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>> On Wed, 13 Mar 2024 at 05:55, Hao Li
> > > > >>>>> <h...@confluent.io.invalid
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>>>> wrote:
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> Hi, Dev
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> Mingge, Chris and I would like to start a
> discussion
> > > > about
> > > > >>>>>>>>>>>>> FLIP-437:
> > > > >>>>>>>>>>>>>>>>> Support ML Models in Flink SQL.
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> This FLIP is proposing to support machine learning
> > > models
> > > > >>> in
> > > > >>>>>>>>>>>> Flink
> > > > >>>>>>>>>>>>>> SQL
> > > > >>>>>>>>>>>>>>>>> syntax so that users can CRUD models with Flink SQL
> > and
> > > > use
> > > > >>>>>>>>>>>> models
> > > > >>>>>>>>>>>>> on
> > > > >>>>>>>>>>>>>>>> Flink
> > > > >>>>>>>>>>>>>>>>> to do prediction with Flink data. The FLIP also
> > > proposes
> > > > >>> new
> > > > >>>>>>>>>>>> model
> > > > >>>>>>>>>>>>>>>> entities
> > > > >>>>>>>>>>>>>>>>> and changes to catalog interface to support model
> > CRUD
> > > > >>>>>>>>>>> operations
> > > > >>>>>>>>>>>>> in
> > > > >>>>>>>>>>>>>>>>> catalog.
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> For more details, see FLIP-437 [1]. Looking forward
> > to
> > > > your
> > > > >>>>>>>>>>>>> feedback.
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> [1]
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-437%3A+Support+ML+Models+in+Flink+SQL
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>> Thanks,
> > > > >>>>>>>>>>>>>>>>> Minge, Chris & Hao
> > > > >>>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>>
> > > > >>>>>>>>>>>>>
> > > > >>>>>>>>>>>>
> > > > >>>>>>>>>>>
> > > > >>>>>>>>>>
> > > > >>>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>>>
> > > > >>>>>>
> > > > >>>>>
> > > > >>>>
> > > > >>>
> > > > >>>
> > > > >
> > > >
> > > >
> > >
> >
>

Reply via email to