Hi Mika,

Thanks for this great work! The FLIP LGTM overall. It would be a great
improvement.

Regards,
Dian

On Thu, Sep 3, 2026 at 6:38 PM Mika Naylor <[email protected]> wrote:
>
> Hi all!
>
> Thank you for the discussion on this. Just wanted to bump the discussion 
> again in case anyone had any
> input or feedback (especially around the deprecation plan in the FLIP) - I 
> would like to try and open
> voting on it later this week :)
>
> Kind regards,
> Mika
>
> > On 26. Aug 2026, at 12:42, Mika Naylor <[email protected]> wrote:
> >
> > Hey everyone!
> >
> > I would like to kick off a discussion on FLIP-609: Type Inference for 
> > Python User Defined Functions[1].
> >
> > While working with Python UDFs, I often noticed I was doing some duplicate 
> > effort around type hinting - in one place
> > so the planner knows the Flink specific input/output types of the UDF, and 
> > also on the function itself so I could have
> > an extra layer of checking my type assumptions/flow using type checking 
> > tools like mypy. I also noticed that there was
> > a bit of friction in doing this, especially since the form of specifying 
> > input types through the UDF constructor was
> > necessarily disconnected from the actual function arguments the types 
> > referred to.
> >
> > This FLIP proposes to add a type hints -> Flink types inference layer for 
> > UDFs, so that users in ideal cases should
> > only have to annotate their function using native Python type hints, and we 
> > can infer the input/output Flink types from
> > those. In more complex cases, where users want to specify a specific Flink 
> > type rather than a Python type, I also propose
> > to add some shadow types that wrap the Flink types in a corresponding 
> > Python type, so that both type checking works,
> > and the Flink specific type hints are bound to the actual arguments, rather 
> > than just the argument positions via the udf
> > decorator. So that a user could do the following:
> >
> > from dataclasses import dataclass
> > from typing import Optional
> > from pyflink.table import udf
> > from pyflink.table.typehints import TinyInt, SmallInt, Decimal
> >
> > Money = Decimal(18, 2)
> >
> > @dataclass
> > class PricingResult:
> >    final_price: Money
> >    discount_applied: bool
> >    tier: TinyInt
> >
> > @udf()
> > def apply_discount(
> >    price: Money,
> >    discount_pct: Optional[SmallInt],
> >    tier: TinyInt,
> > ) -> PricingResult:
> >    pct = discount_pct or 0
> >    discount = price * pct / 100
> >    return PricingResult(
> >        final_price=price - discount,
> >        discount_applied=pct > 0,
> >        tier=tier,
> >    )
> >
> > Would love any thoughts or feedback the community might have on this 
> > proposal!
> >
> > Kind regards,
> > Mika Naylor
> >
> > [1] 
> > https://cwiki.apache.org/confluence/spaces/FLINK/pages/449286339/FLIP-609+Type+Inference+for+Python+User+Defined+Functions
> >
> >
>

Reply via email to