Select KDB 中混合类型行的值
Select value from mixed-type row in KDB
我们用类型 C(即字符数组)定义了我们的 KDB table。我们插入的第一个值的类型是 String。第二个值的类型是 int(即 i)。现在,当我们尝试使用条件 where like="value"
查询 KDB 时,它不起作用。因为我们在一列中有混合类型,我们如何根据这一列查询数据并过滤它(在where
子句中使用)?
我几乎不想在这里给出解决方案,因为在单个列中混合字符串和整数是一个糟糕的主意。完全破坏性能并阻止 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 所说,您应该避免在列中混合类型。如果你这样做,你会失去很多速度,让你的生活变成地狱。我会说你应该做的第一件事是检查你获取数据的方式(以及这些数据是什么样的)。听起来您可能想要以不同的方式表示您的数据。
我们用类型 C(即字符数组)定义了我们的 KDB table。我们插入的第一个值的类型是 String。第二个值的类型是 int(即 i)。现在,当我们尝试使用条件 where like="value"
查询 KDB 时,它不起作用。因为我们在一列中有混合类型,我们如何根据这一列查询数据并过滤它(在where
子句中使用)?
我几乎不想在这里给出解决方案,因为在单个列中混合字符串和整数是一个糟糕的主意。完全破坏性能并阻止 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 所说,您应该避免在列中混合类型。如果你这样做,你会失去很多速度,让你的生活变成地狱。我会说你应该做的第一件事是检查你获取数据的方式(以及这些数据是什么样的)。听起来您可能想要以不同的方式表示您的数据。