Hi Dawid, I added `*bridgedTo = Map.class*` as you suggested and got a slightly different exception. I also tried passing a rawSerializer (an implementation similar to MapSerializer[1] with String type key and value) but got the same exception as without it. I am using Flink v1.11 for reference.
@FunctionHint( input = { @DataTypeHint(value="RAW", bridgedTo=Map.class, rawSerializer=MyMapSerializer.class), @DataTypeHint("STRING") }, output = @DataTypeHint("STRING") ) public static String eval(final Object map, final String key) *Exception:* Caused by: org.apache.flink.table.api.ValidationException: Invalid input arguments. Expected signatures are: MAP_VALUE(RAW('java.util.Map', '...'), STRING) at org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidInputException(TypeInferenceUtil.java:190) at org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:131) at org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:89) ... 49 more Caused by: org.apache.flink.table.api.ValidationException: Invalid argument type at position 0. Data type RAW('java.util.Map', '...') expected but RAW('java.util.Map', ?) passed. at org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:137) at org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:102) at org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:126) ... 50 more [1] https://github.com/apache/flink/blob/release-1.11.0/flink-core/src/main/java/org/apache/flink/api/common/typeutils/base/MapSerializer.java On Tue, Oct 27, 2020 at 6:13 AM Dawid Wysakowicz <dwysakow...@apache.org> wrote: > Hey Steve, > > You should be able to do via the bridgedTo parameter. You can additionally > specify a serializer you want to use via rawSerializer parameter: > > @FunctionHint( > input = { > @DataTypeHint(value = "RAW", bridgedTo = > Map.class[, rawSerializer = ... ]), > @DataTypeHint("STRING")}, > output = @DataTypeHint("STRING") > ) > public static String eval(final Object map, final String key) > > Best, > > Dawid > On 26/10/2020 16:10, Steve Whelan wrote: > > Hi, > > I have a column of type *RAW('java.util.Map', ?)* that I want to pass to > a scalar function UDF. I'm using DataTypeHints but hitting an exception. > What would be the proper DataTypeHint and data type param to achieve this? > > @FunctionHint( > input = {@DataTypeHint("RAW"), @DataTypeHint("STRING")}, > output = @DataTypeHint("STRING") > ) > public static String eval(final Object map, final String key) { > // business logic > } > > > *Exception:* > > Caused by: org.apache.flink.table.api.ValidationException: Invalid input > arguments. Expected signatures are: > MAP_VALUE(RAW('java.lang.Object', '...'), STRING) > at > org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidInputException(TypeInferenceUtil.java:190) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:131) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:89) > ... 50 more > Caused by: org.apache.flink.table.api.ValidationException: Invalid > argument type at position 0. Data type RAW('java.lang.Object', '...') > expected but RAW('java.util.Map', ?) passed. > at > org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:137) > at > org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:102) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:126) > ... 51 more > > > Thank you, > > Steve > >