为什么 union join (uj) 有时会触发 "cast" 错误?
Why does union join (uj) sometimes trigger "cast" error?
当我尝试联合连接 (uj
) KDB+ 中的两个非常简单的五行表时出现错误 'cast
。
下面代码错误的原因是什么?
q)t1b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
q)t2b
Symbol| RIC
------| ------
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)meta t1b
c | t f a
------| -----
Symbol| s
RIC | s
q)meta t2b
c | t f a
------| -----
Symbol| s
RIC | s
q)keys t1b
,`Symbol
q)keys t2b
,`Symbol
q)t1b uj t2b
k){+.[x;(!+y;i);:;.+y z i:&z<#y]}
'cast
q))
如果我剥离主键,加入,然后重新应用主键,它就可以工作。但为什么?当然,我在这里遗漏了一些关于 KDB+ 的基本知识。
q)tuj: `Symbol xkey (() xkey t1b) uj (() xkey t2b)
q)tuj
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)meta tuj
c | t f a
------| -----
Symbol| s
RIC | s
q)keys tuj
,`Symbol
能否请您查看上面的示例代码:
您已经声明了两个表 t1b 和 t2b,但是当您尝试连接 t1 和 t2 时出现转换错误?这些表的值是多少?
t1b 和 t2b 将加入:
q)t1b:([Symbol:`000001.SZ`000001.ZK`000002.SZ`000002.ZK`000004.SZ]RIC:`000001.SZ`000001.ZK`000002.SZ`000002.ZK`000004.SZ)
q)t2b:([Symbol:`1301`1332`1333`1334`1352]RIC:`1301.T`1332.T`1333.T`1334.T`1352.T)
q)meta t1b
c | t f a
------| -----
Symbol| s
RIC | s
q)meta t2b
c | t f a
------| -----
Symbol| s
RIC | s
q)keys t1b
,`Symbol
q)keys t2b
,`Symbol
q)t1b uj t2b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)t1b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
q)t2b
Symbol| RIC
------| ------
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
看起来您正在尝试联合连接表 t1
和 t2
而不是 t1b
和 t2b
。如图所示连接示例表应该按预期工作。
很可能是因为您的某些符号已被枚举,而另一些未被枚举
当我尝试联合连接 (uj
) KDB+ 中的两个非常简单的五行表时出现错误 'cast
。
下面代码错误的原因是什么?
q)t1b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
q)t2b
Symbol| RIC
------| ------
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)meta t1b
c | t f a
------| -----
Symbol| s
RIC | s
q)meta t2b
c | t f a
------| -----
Symbol| s
RIC | s
q)keys t1b
,`Symbol
q)keys t2b
,`Symbol
q)t1b uj t2b
k){+.[x;(!+y;i);:;.+y z i:&z<#y]}
'cast
q))
如果我剥离主键,加入,然后重新应用主键,它就可以工作。但为什么?当然,我在这里遗漏了一些关于 KDB+ 的基本知识。
q)tuj: `Symbol xkey (() xkey t1b) uj (() xkey t2b)
q)tuj
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)meta tuj
c | t f a
------| -----
Symbol| s
RIC | s
q)keys tuj
,`Symbol
能否请您查看上面的示例代码: 您已经声明了两个表 t1b 和 t2b,但是当您尝试连接 t1 和 t2 时出现转换错误?这些表的值是多少?
t1b 和 t2b 将加入:
q)t1b:([Symbol:`000001.SZ`000001.ZK`000002.SZ`000002.ZK`000004.SZ]RIC:`000001.SZ`000001.ZK`000002.SZ`000002.ZK`000004.SZ)
q)t2b:([Symbol:`1301`1332`1333`1334`1352]RIC:`1301.T`1332.T`1333.T`1334.T`1352.T)
q)meta t1b
c | t f a
------| -----
Symbol| s
RIC | s
q)meta t2b
c | t f a
------| -----
Symbol| s
RIC | s
q)keys t1b
,`Symbol
q)keys t2b
,`Symbol
q)t1b uj t2b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
q)t1b
Symbol | RIC
---------| ---------
000001.SZ| 000001.SZ
000001.ZK| 000001.ZK
000002.SZ| 000002.SZ
000002.ZK| 000002.ZK
000004.SZ| 000004.SZ
q)t2b
Symbol| RIC
------| ------
1301 | 1301.T
1332 | 1332.T
1333 | 1333.T
1334 | 1334.T
1352 | 1352.T
看起来您正在尝试联合连接表 t1
和 t2
而不是 t1b
和 t2b
。如图所示连接示例表应该按预期工作。
很可能是因为您的某些符号已被枚举,而另一些未被枚举