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 > > > > >
