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