This would be a significantly improved devex and I love the idea! Thanks for proposing, Mika.
On Wed, Aug 26, 2026 at 3:45 AM 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 > > >
