R, ClickHouse: Ожидается: фиксированная строка(34). Получено: UInt64: во время обработки

#r #dbi #clickhouse

#r #dbi #clickhouse

Вопрос:

Я пытаюсь запросить данные из базы данных ClickHouse из R с помощью подмножества. Вот пример

 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 . Ожидается: исправленная строка (34). Получено: UInt64: во время обработки (идентификаторы В ….

Любая помощь приветствуется

Благодаря комментарию @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.
 

используйте приведение к строке или к фиксированной строке

выберите * из (выберите ‘x’ B ), где toFixedString(B,1) в (выберите toFixedString(‘x’,1))