SQL 错误 [46] [07000]: Code: 46. DB::Exception: Unknown function setOrAdd: While processing _CAST(if((channel_id = 0) AND (batch_no = '') AND (log_no = ''), _CAST(setOrAdd(steps, 2, 3), 'Map(Int64, Int64)'), steps), 'Map(Int64, Int64)'). (UNKNOWN_FUNCTION) (version 22.1.3.7 (official build))
时间: 2024-03-21 15:40:56 浏览: 160
很抱歉,看起来您正在使用的ClickHouse版本可能不支持`setOrAdd`函数。`setOrAdd`函数是在ClickHouse 20.3.9.60及更高版本中引入的,如果您使用的版本低于此,则可能会出现上述错误。
您可以尝试使用`ifnull`函数来检查Map中是否存在键,并根据需要插入或更新键。以下是一个示例:
假设我们有一个表`test`,其中有一个名为`my_map`的Map列,它将整数映射到整数数组。现在我们想要在Map中添加一个新的键值对`("2", [3,4])`。我们可以执行以下操作:
```sql
-- 更新之前的值
SELECT my_map FROM test WHERE id = 1;
-- 更新Map值
UPDATE test SET my_map = ifnull(my_map, toMap([]))(toInt64(2), [3,4]) WHERE id = 1;
-- 更新之后的值
SELECT my_map FROM test WHERE id = 1;
```
在上面的示例中,我们使用了`ifnull`函数来检查是否存在`my_map`,如果`my_map`不存在,则创建一个空的Map。然后,我们使用`toInt64`函数将键转换为整数类型,并使用`[3,4]`作为新的值插入或更新指定的键。最后,我们再次使用`SELECT`语句检索更新后的Map列`my_map`的值,以确认更新已成功。
请注意,如果要更新Map中的现有键,则应使用`UPDATE`语句。如果要从Map中删除键,则可以将其值设置为NULL。
阅读全文