2017-04-03 72 views
0

我創建了一個自定義的UDF被註冊,但是當我嘗試選擇custom_udf(10)我得到以下錯誤: Exact implementation of BasicPlatform do not match expected java types 這裏是我的UDF,我似乎無法弄清楚什麼是不妥之處: 公共類ScalarUdfs {普雷斯托定製UDF

private ScalarUdfs() {}; 

@ScalarFunction("basic_platform") 
@SqlType(StandardTypes.VARCHAR) 
public static Slice BasicPlatform(@SqlNullable @SqlType(StandardTypes.INTEGER) Integer id) { 
    final Slice IOS = Slices.utf8Slice("iOS"); 
    final Slice ANDROID = Slices.utf8Slice("Android"); 
    final Slice WEB = Slices.utf8Slice("Web"); 
    final Slice OTHER = Slices.utf8Slice("Other"); 
    final Map<Integer, Slice> PLATFORM_MAP = new HashMap<Integer, Slice>() {{ 
     put(20, IOS); 
     put(42, ANDROID); 
     put(100, WEB); 
    }}; 

    if (id == null || !PLATFORM_MAP.containsKey(id)) { 
     return OTHER; 
    } 
    return PLATFORM_MAP.get(id); 
} 

}

做任何事情似乎顯然是錯誤的?我希望它返回一個給定int作爲參數的字符串,並且我認爲java和sql類型匹配(Integer - > Integer),(Slice - > varchar)。

感謝

回答

1

的問題也被提出和回答的presto-users

你必須使用@SqlNullable @SqlType(StandardTypes.INTEGER) Long id(如SQL integerLong在Java的支持)。

+0

嘿Piotr。是的,我在兩個平臺上都問過。這是解決,謝謝:) –

+0

@AceHaidrey我知道。爲了未來的遊客也在這裏回答。 –