Clickhouse UDF 未按预期传递参数

问题描述 投票:0回答:1

我在Clickhouse中创建了UDF,例如:

create function test_function AS (in_param)  -> (select col1 from table1 t1 join table2 t2 on t1.key=t2.key where t1.key = in_param);

当我尝试以下示例时,只需显式传递字符串值即可正常工作:

select test_function('10000');

但是下面的例子失败了:

select test_function(x_id) from tablex where colx='somevalue';

失败并出现错误:

Code: 47. DB::Exception: Missing columns: 'x_id' while processing query: 'select col1 from table1 t1 join table2 t2 on t1.key=t2.key where t1.key = x_id'

就好像 x_id 的值没有传递给函数一样,看起来该函数正在处理字符串“x_id”而不是字段 x_id 的值。有什么建议吗?

sql user-defined-functions clickhouse
1个回答
0
投票

我在 Clickhouse 中也遇到过类似的不明显行为。

Clickhouse 将列

x_id
传递为
in_param
,但 table1 和 table2 中没有该列

select col1 from table1 t1 join table2 t2 on t1.key=t2.key where t1.key = in_param

所以查询失败。

当我在 Clikhouse 开发者电报聊天中询问此行为时,他们回答我,出于性能考虑,这是预期行为。

唯一的解决方案是使用字典代替

table1
table2
,并在UDF主体中使用
dictGet
而不是查询常规表。

© www.soinside.com 2019 - 2024. All rights reserved.