【问题标题】:Why am i getting rank error when trying to .Q.dpft?为什么我在尝试 .Q.dpft 时会出现排名错误?
【发布时间】:2018-04-18 10:58:23
【问题描述】:

我创建了一个新的仅限 HDB 的 kdb,并有一个用于在表中填充数据的脚本。

func{[]
     var1:<some logic that calls other functions and brings back results>;
     var2:<same as above>;
     saveToDB[var1;var2];
  };

saveToDB{[var1;var2]

        path:`$":/path/to/db";
        tableName1:var1;
        tableName2:var2;

        show "saving table1";
        .Q.dpft[path;.z.d;`sym;`tableName1];
        show "saving table2";
        .Q.dpft[path;.z.d;`sym;`tableName2]; 
  };

我在这里做错了什么?我确实在日志中看到了第一个显示字符串,然后它出错了。 我确实将结果放入变量 var1 和 var2 中。我正在调用 func[]。

P.S 我尝试将 tableName1 和 tableName2 设为全局变量,但仍然遇到同样的问题。

欣赏任何指针。谢谢!

【问题讨论】:

  • “它出错了” 那么,你为什么不在你的帖子中引用完整的错误呢?

标签: kdb


【解决方案1】:

我还建议运行该函数并在 saveToDB 的开头添加一个中断,看看 var1 和 var2 的样子。这可能是由表格格式引起的问题。您还可以通过包含此行在 saveToDB 函数的开头检查这一点。

即

if[any 98<>type each(var1;var2);:-1"ERROR: not tables"];

如果表格没问题,请尝试更换

tableName1:var1;
tableName2:var2;

`tableName1 set var1;
`tableName2 set var2;

[...other code...]
delete tableName1,tableName2 from `.;         

如果您使用日志,我还建议使用-1 而不是show,因为从命令行重定向输出是常见的做法。

您还可以选择另一种保存表格的方法。例如,使用.Q.en 枚举列(如有必要)并使用.Q.par 将表格保存为展开表格。

【讨论】:

  • .Q.par 不会将数据保存为张开的表格。 'set' 用于显示数据的函数。 .Q.par 返回分区数据库中分区的位置。
  • 我相信 Alex 打算使用 .Q.par 和 set 来保存展开的表格。类似于以下代码:(`$(string .Q.par[`:.;.z.d;`tablename1]),"/") set .Q.en[`:.]tablename1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
相关资源
最近更新 更多