我正在創建一個插件來托管 UDF,它是一個 http_get 函式,接收httpAddress路徑、查詢parameters和請求headers。它在scala中實作:
@ScalarFunction(value = "http_get", deterministic = true)
@Description("Returns the result of an Http Get request")
@SqlType(value = StandardTypes.VARCHAR)
def httpGetFromArrayMap(
@SqlType(StandardTypes.VARCHAR) httpAddress: Slice,
@SqlType(constants.STRING_MAP) parameters: ImmutableMap[Slice, Slice],
@SqlNullable @SqlType(constants.STRING_MAP) headers: ImmutableMap[Slice, Slice],
): String = {
val stringHeaders = castSliceMap(headers)
val stringParams = castSliceMap(parameters)
val request = Http(httpAddress.toStringUtf8).headers(stringHeaders).params(stringParams)
val stringResponse = request.asString.body
stringResponse
}
在 trino 上運行時,它會引發以下例外:
io.trino.spi.TrinoException: Exact implementation of http_get do not match expected java types.
問題是:對應的java型別是map(varchar,varchar)什么?
我試過很多:
- 斯卡拉地圖[字串,字串]
- Java 地圖<字串,字串>
- Java Map<切片,切片>
- 不可變映射<字串,字串>
- 不可變映射<切片,切片>
找不到任何實作接收地圖功能的插件示例。
任何幫助表示贊賞。謝謝
uj5u.com熱心網友回復:
免責宣告:我對 Trino UDF 一點也不熟悉
根據您可以在 Trino 存盤庫中找到的示例,用于 a 的型別SqlType("map(X,y)")是io.trino.spi.block.Block.
然后Block可以操縱 以提取其內容,就好像它是常規的Map.
參見例如:https ://github.com/trinodb/trino/blob/master/core/trino-main/src/main/java/io/trino/operator/scalar/MathFunctions.java#L1340
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508561.html
