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

Reply via email to