Выберите значение из строки смешанного типа в KDB

Мы определили нашу таблицу KDB с типом C (т.е. массивом символов). Первое значение, которое мы вставили, имело тип String. Второе значение имело тип int (т.е. i). Теперь, когда мы пытаемся запросить KDB с условиями where like="value", это не работает. Поскольку у нас есть смешанный тип в одном столбце, как мы можем запросить данные и отфильтровать их (использовать в предложении where) на основе этого столбца?


person user3914448    schedule 10.02.2015    source источник
comment
Можете ли вы предоставить простой пример вашей таблицы и запроса, который вы используете. Это поможет четко понять вашу проблему.   -  person Rahul    schedule 10.02.2015


Ответы (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"

Но не говорите, что вас не предупреждали или не советовали!

person terrylynch    schedule 10.02.2015

Как сказал @terrylynch, вам следует избегать смешивания типов в столбцах. Вы потеряете много скорости и превратите свою жизнь в ад, если сделаете это. Я бы сказал, что первое, что вы должны сделать, это проверить, как вы получаете данные (и на что похожи эти данные). Похоже, вы можете захотеть представить свои данные по-другому.

person JPC    schedule 12.02.2015