Мы определили нашу таблицу KDB с типом C (т.е. массивом символов). Первое значение, которое мы вставили, имело тип String. Второе значение имело тип int (т.е. i). Теперь, когда мы пытаемся запросить KDB с условиями where like="value"
, это не работает. Поскольку у нас есть смешанный тип в одном столбце, как мы можем запросить данные и отфильтровать их (использовать в предложении where
) на основе этого столбца?
Выберите значение из строки смешанного типа в KDB
Ответы (2)
Я почти не хочу приводить здесь решение, потому что смешивание строк с целыми числами в одном столбце — ужасная идея. Полностью снижает производительность и предотвращает любые преимущества, которые предлагает kdb.
Прежде всего, переосмыслите свою настройку.
Если вы настаиваете на том, чтобы оставить его как есть, вы можете запросить его следующим образом:
tab:([] col1:`a`b`c;col2:1 2 3;col3:("foo";"bar";1i))
Для точного соответствия
q)select from tab where col3~\:"foo"
col1 col2 col3
---------------
a 1 "foo"
q)select from tab where col3~\:1i
col1 col2 col3
--------------
c 3 1
Для сопоставления регулярных выражений
q)select from tab where {$[10h=type x;x like "f*";0b]}'[col3]
col1 col2 col3
---------------
a 1 "foo"
Но не говорите, что вас не предупреждали или не советовали!
Как сказал @terrylynch, вам следует избегать смешивания типов в столбцах. Вы потеряете много скорости и превратите свою жизнь в ад, если сделаете это. Я бы сказал, что первое, что вы должны сделать, это проверить, как вы получаете данные (и на что похожи эти данные). Похоже, вы можете захотеть представить свои данные по-другому.