你不能直接从分区数据库中删除数据行,所以我看到的方法是:
使用日期的 where 子句将表加载到内存中
从内存中的表中删除行
将表重新保存到磁盘,覆盖旧数据
但这假设该分区可以加载到内存中。如果做不到,那我能做什么呢?
我查看了 dbmaint.q 脚本,但似乎没有修改行的解决方案,只有列。
我有一组单元测试,我想立即运行它们,并有一个包含多行的表,其中“通过”的为绿色,“失败”的为红色。
我知道我必须使用 ANSI 颜色代码,但到目前为止我无法使其与neg[1]命令一起使用,甚至无法使用system""
这可能吗?
我想统计Id的数量并将它们按类别分组在特定时间下
样本数据:
tab:([]time:1000?.z.t;category:1000?`a`b`c`d;id:1000?`abc`cdb`jiw`opw`jiofsef`lksfj)
Run Code Online (Sandbox Code Playgroud)
我期待的结果就像
按组划分的 ID 时间编号
00:00 - 05:00 300
05:00 - 12:00 100
12:00 - 17:00 200
17:00 - 24:00 400
这里的时间差距可能不完全相同。任何想法?
这就是我到目前为止所得到的:
select count id by category from tab
Run Code Online (Sandbox Code Playgroud) 我在 kdb/Q 中有一个表,如下所示:
table_a:([] Symbol:`X`Y`Z; StartDate:2023.09.01 2023.09.02 2023.09.03;Name:`Maria`Sam`Sydney);
Run Code Online (Sandbox Code Playgroud)
它给了我一个看起来像这样的表:
| 象征 | 开始日期 | 姓名 |
|---|---|---|
| X | 2023.09.01 | 玛丽亚 |
| 是 | 2023.09.02 | 山姆 |
| Z | 2023.09.03 | 悉尼 |
我想要的是在 StartDate 和 Name 列之间创建一个新列,因此看起来像这样:
| 象征 | 开始日期 | 结束日期 | 姓名 |
|---|---|---|---|
| X | 2023.09.01 | 2023.09.01 | 玛丽亚 |
| 是 | 2023.09.02 | 2023.09.08 | 山姆 |
| Z | 2023.09.03 | 2023.09.14 | 悉尼 |
我查找了文档,但看起来只有将行附加到表末尾的选项。有没有办法让我在使用 Q 之间添加新列,或者我是否必须重建当前表?
我有一个包含日期的表格: ([] date: 2023.09.09 2024.07.01 2027.02.06) 并且需要将其转换为格式“Mmm-yy”
| 日期 |
|---|
| 9 月 23 日 |
| 7 月 24 日 |
| 2 月 27 日 |
首先,我无法理解exec和selectin之间的区别kdb。exec的参考并没有多大帮助!
其次,我正在尝试编写一个程序来解决欧拉问题 5。我通过使用modand解决了它each,但它很慢并且需要大量空间。我相信我可以通过将 20 的素数分解的值相加来做到这一点。那是对的吗?如果是这样,任何人都可以帮助我这样做吗?我写了以下内容来获得素数分解。它还不能接收列表。
f1:{(x mod y) = 0}
f2:{if[f1[a;y]&(not max f1[y;x],0);x:x,y];x}
f3:{x+:1;y:f2[y;x];if[x<a;y:.z.s[x;y]];y}
f3[1;()
Run Code Online (Sandbox Code Playgroud) 我试图找到第一个真实值的索引:
1b?001b
Expected result: 2
Actual result: ,0b
Run Code Online (Sandbox Code Playgroud)
两个问题:
我试图在查询完成后强制终止(而不是关闭)aq 会话,以节省计算机上的资源。
目前它正在使用:
conn.sendAsync("exit 0")
问题是,如果我在它之后再次运行查询(尝试重新打开连接并运行另一个查询),它可能会失败,因为之前的连接仍会被终止asynchronous。
因此,我尝试对synchronous查询执行相同的操作,但在尝试时:
conn.sendSync("exit 0")
我得到:
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
python-BaseException
Run Code Online (Sandbox Code Playgroud)
我可以指定一个超时,以便 q 会话在 10 秒后自动终止,或者也许还有另一种方法来强制终止 q 会话?
我的代码如下所示:
conn = qc.QConnection(host='localhost', port=12345, timeout=10000)
conn.open()
res = None
try:
res = conn.sendSync(query, numpy_temporals=True)
except Exception as e:
print(f'Error running {query}: {e}')
conn.sendSync("exit 0")
conn.close()
Run Code Online (Sandbox Code Playgroud)