Hi Jaro,

I do not think DataFusion currently supports creating UDFs in SQL (they
need to be implemented in Rust or the system using DataFusion).

I am not sure if Ballista contains support for them

Andrew

On Thu, Jan 12, 2023 at 4:47 PM Jeremy Dyer <jdy...@gmail.com> wrote:

> Hey Jaro,
>
> While not written in Java, nor a UDF, there are some examples in [1]
> dask-sql (python based) where we do this to extend DataFusion for custom
> grammars, CREATE MODEL, for example. In a nutshell you want to write some
> Rust code that extends the DataFusion parser and then performs any binding
> logic required when your custom UDF statement is encountered. The
> processing chain is a little lengthy to follow but you can see where that
> starts [2] here. The `DaskParser` maintains a member which is the
> DataFusion parser itself. Happy to give more details just wanted to give
> you a place to start looking.
>
> Thanks,
> Jeremy Dyer
>
> [1] - https://github.com/dask-contrib/dask-sql
> [2] -
>
> https://github.com/dask-contrib/dask-sql/blob/main/dask_planner/src/parser.rs#L385
>
> On Thu, Jan 12, 2023 at 10:36 AM Jaroslaw Nowosad <yare...@gmail.com>
> wrote:
>
> > Hi all,
> >
> > I had a task to investigate how to extend Datafusion to add UDFs written
> in
> > plain SQL.
> > Reason behind:  there is quite a big bunch of SQL UDF in existing java
> > (spark) solutions, however we are starting to move into the Rust
> ecosystem
> > and Datafussion/Arrow/Ballista looks like the proper way.
> >
> > Question:
> > Could I get some points on how to extend DF to add "CREATE FUNCTION AAA
> > (p1:int, p2: int) RETURN INT AS '<sql style body here' "?
> >
> > I saw some rewrite propositions, extending SQL parser with a new command
> or
> > creating separate parser/dialect.
> >
> > Best Regards,
> > Jaro
> >
>

Reply via email to