首页 > 解决方案 > 如何使用 kdb(32 位)解压缩消息?

问题描述

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

0xab562a494cca4955b2522a2e4f2cd0cf4d2cca8e2f28ca4c4e55d2514a492c4954b28aae56cacc2b2e292acd4dcd2b89cf4c012a750a71d60d0d76d10d0e770c00aa43d264a56462606a68ac6709142ec9cc4d2d2e49cc2d00ea30323032d4350022cb1043732b230b2b23333d2323a328a5dad85a00

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

标签: compressionkdb

解决方案


我认为这里最简单的选择是通过embedPy使用 zlib Python 库。

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

然后我们可以使用 .jk 将其从 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")

推荐阅读