我正在尝试为Apache Drill实现用户定义的功能。
该函数采用浮点参数(decimals do not work),并且它们必须为可空值才能返回零。
但是,当我使用const fs = require('fs')
const stream = require('stream')
app.get('/report/:chart_id/:user_id',(req, res) => {
const r = fs.createReadStream('path to file') // or any other way to get a readable stream
const ps = new stream.PassThrough() // <---- this makes a trick with stream error handling
stream.pipeline(
r,
ps, // <---- this makes a trick with stream error handling
(err) => {
if (err) {
console.log(err) // No such file or any other kind of error
return res.sendStatus(400);
}
})
ps.pipe(res) // <---- this makes a trick with stream error handling
})
并将参数设置为可为null的类型时,将无法再调用该函数。
NullHandling.Internal
验证错误:(...):未找到功能签名TESTING_UDF(
的匹配项, )
SELECT tetsting_udf(1.23,4.56);
验证错误:(...):未找到函数签名TESTING_UDF(
的匹配项, )
使用Float8Holders和NullHandling.NULL_IF_NULL时,以上两个调用均有效。
我做错了什么?
SELECT tetsting_udf(cast(1.23 as float), cast(4.56 as float));
答案 0 :(得分:1)
对于指定FunctionTemplate.NullHandling.INTERNAL
的情况,应指定具有所有可空性组合的UDF实现。对于您的情况,您应该指定接受(Float8Holder
和Float8Holder
,(NullableFloat8Holder
和NullableFloat8Holder
),(Float8Holder
和NullableFloat8Holder
的UDF。 ),({NullableFloat8Holder
和Float8Holder
)。