如何为 KDB+ 创建带有 char 数组的批量对象

how to create bulk object with char arrays for KDB+

我需要通过 C 接口将大量 K 对象发送到 KDB 目前我所有的字符串都作为不理想的符号发送。

我想用标准字符数组替换所有符号

对于 Symbols,我是这样做的

// table_def:([] name: `symbol$())

K m_data = ktn(0, 1); // 1 column
kK(m_data)[0] = ktn(KS, 100); // 100 rows in bulk

for (unsigned i = 0; i < 100; i++) {
    kS(kK(m_data)[0])[i] = ss("abc");
}

但不确定如何为 char 数组创建 Bulk 结构,这是我尝试过的方法。

// table_def:([] name: `char$())

K m_data = ktn(0, 1); // 1 column
kK(m_data)[0] = ktn(KC, 100); // 100 rows in bulk

for (unsigned i = 0; i < 100; i++) {
    kS(kK(m_data)[0])[i] = ss("abc"); // this fail with a `type error
    kC(kK(m_data)[0])[i] = kp("abc"); // this fail because kC expect a char not a char*

如有任何帮助,我们将不胜感激

kdb中的一个string列被认为是一个通用类型(list of list of char)。

q)type each flip ([]a:string`aa`bb;b:"ab")
a| 0       <-- string column
b| 10      <-- char column

所以你的 kdb table 定义应该是

// table_def:([] name: ())

您之前的定义期望列值是原子字符(这不是您想要的),因此我认为是“类型错误”。

因此,在您的 C 代码中创建 K 对象时,第一列中的数据类型应为混合类型:

kK(m_data)[0] = ktn(0, 100);

从那里,为每行创建值:

kK(kK(m_data)[0])[i] = kp("abc");

你能试试上面的方法,看看效果如何吗?目前这里没有工作示例:(