R,ClickHouse:预期:FixedString(34)。得到:UInt64:处理时

Posted

技术标签:

【中文标题】R,ClickHouse:预期:FixedString(34)。得到:UInt64:处理时【英文标题】:R, ClickHouse: Expected: FixedString(34). Got: UInt64: While processing 【发布时间】:2020-12-07 19:20:24 【问题描述】:

我正在尝试从带有子集的 R 中查询 ClickHouse 数据库中的数据。 这是一个例子

library(data.table)
library(RClickhouse)
library(DBI)

subset <- paste(traffic[,unique(IDs)][1:30], collapse = ',')

conClickHouse <- DBI::dbConnect('here is the connection')


DataX <- dbgetdbGetQuery(conClickHouse, paste0("select * from database
                    and  IDs in (", subset ,") ", sep = "") )

结果我得到错误:

DB::Exception:IN 或 VALUES 部分中的类型不匹配。预期:FixedString(34)。 得到:UInt64: While processing (IDs IN ....

感谢任何帮助

感谢@DennyCrane 的评论,

"select * from database where toFixedString(IDs,34) in
     (toFixedString(ID1, 34), toFixedString(ID2,34 ))"

这个查询子集正确

【问题讨论】:

【参考方案1】:

https://clickhouse.tech/docs/en/sql-reference/functions/#strong-typing

强类型

与标准 SQL 相比,ClickHouse 具有强类型。换句话说,它不会在类型之间进行隐式转换。每个函数都适用于一组特定的类型。这意味着有时您需要使用类型转换函数。

https://clickhouse.tech/docs/en/sql-reference/functions/type-conversion-functions/#tofixedstrings-n

select * from (select 'x' B ) where B in (select toFixedString('x',1))
DB::Exception: Types of column 1 in section IN don't match: String on the left, FixedString(1) on the right.

使用强制转换为 toString 或 toFixedString

select * from (select 'x' B ) where toFixedString(B,1) in (select toFixedString('x',1))

【讨论】:

以上是关于R,ClickHouse:预期:FixedString(34)。得到:UInt64:处理时的主要内容,如果未能解决你的问题,请参考以下文章

Clickhouse:runningAccumulate() 不像我预期的那样工作

如何在 clickhouse 中聚合数组类型

更改 ClickHouse 中排序键表达式的方向

使用clickhouse-backup工具备份clickhouse数据库

如何在 Windows 中使用 Clickhouse 访问 Docker Container 以加载数据? [复制]

R:lubridate 的 dst() 没有按预期工作