如何使用 kdb(32 位)解压缩消息?

How to uncompress a message with kdb (32 bit)?

我正在尝试解压缩通过 kdb 中的 Deflate 压缩优化的消息,即以下消息:

0xab562a494cca4955b2522a2e4f2cd0cf4d2cca8e2f28ca4c4e55d2514a492c4954b28aae56cacc2b2e292acd4dcd2b89cf4c012a750a71d60d0d76d10d0e770c00aa43d264a56462606a68ac6709142ec9cc4d2d2e49cc2d00ea30323032d4350022cb1043732b230b2b23333d2323a328a5dad85a00

应该如何在 kdb 中实现这一点? 谢谢

我认为这里最简单的选择是通过 embedPy.

使用 zlib Python 库

字节串被传递给解压缩函数,找到 Deflate 设置 here。在 Python 中,这个 returns 是一个字节对象,因此我们可以使用 UTF-8 将其解码为 Python 字符串,最后的反引号 (`) 指定我们希望将其返回为一个 q 类型(也是一个字符串)。

然后我们可以使用 .j.k

将其从 JSON 字符串转换为 KDB 对象
q)\l p.q
q)zlib:.p.import`zlib
q)i:0xab562a494cca4955b2522a2e4f2cd0cf4d2cca8e2f28ca4c4e55d2514a492c4954b28aae56cacc2b2e292acd4dcd2b89cf4c012a750a71d60d0d76d10d0e770c00aa43d264a56462606a68ac6709142ec9cc4d2d2e49cc2d00ea30323032d4350022cb1043732b230b2b23333d2323a328a5dad85a00
q).j.k zlib[`:decompress][i;neg zlib[`:MAX_WBITS]`][`:decode;"utf-8"]`
table| "swap/mark_price"
data | +`instrument_id`mark_price`timestamp!(,"BTC-USD-SWAP";,"40513.9";,"2021-01-09T17:28:26.222Z")