flink-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shuyi Chen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FLINK-9430) Support Casting of Object to Primitive types for Flink SQL UDF
Date Fri, 25 May 2018 00:11:00 GMT

    [ https://issues.apache.org/jira/browse/FLINK-9430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16490026#comment-16490026

Shuyi Chen commented on FLINK-9430:

The JSON object can be a int, float, double, boolean, array, map or etc.. Are you suggesting
serialize the JSON object to String? But in that case, I need to write more UDFs to parse
the String into desired type again, not cast, and also that is inefficient. What are the issues
with returning Object?

> Support Casting of Object to Primitive types for Flink SQL UDF
> --------------------------------------------------------------
>                 Key: FLINK-9430
>                 URL: https://issues.apache.org/jira/browse/FLINK-9430
>             Project: Flink
>          Issue Type: New Feature
>          Components: Table API &amp; SQL
>            Reporter: Shuyi Chen
>            Assignee: Shuyi Chen
>            Priority: Major
> We want to add a SQL UDF to access specific element in a JSON string using JSON path.
However, the JSON element can be of different types, e.g. Int, Float, Double, String, Boolean
and etc.. Since return type is not part of the method signature, we can not use overload.
So we will end up writing a UDF for each type, e.g. GetFloatFromJSON, GetIntFromJSON and etc.,
which has a lot of duplication. 
> One way to unify all these UDF functions is to implement one UDF and return java.lang.Object,
and in the SQL statement, use CAST AS to cast the returned Object into the correct type. Below
is an example:
> {code:java}
> object JsonPathUDF extends ScalarFunction {
>  def eval(jsonStr: String, path: String): Object = {
>    JSONParser.parse(jsonStr).read(path)
>  }
> }{code}
> {code:java}
>  SELECT CAST(jsonpath(json, "$.store.book.title") AS VARCHAR(32)) as bookTitle FROM
> The current Flink SQL cast implementation does not support casting from GenericTypeInfo<java.lang.Object>
to another type, I have already got a local branch to fix this. Please comment if there are
alternatives to the problem above.

This message was sent by Atlassian JIRA

View raw message