有没有办法在kdb+;不先解压缩它?
,有没有办法在kdb+;不先解压缩它?,kdb,q-lang,Kdb,Q Lang,,-11不适用于命名管道,因此一个显而易见的解决方案是将gzip-cd输出重定向到命名管道并将其传递到-11不工作。-11接受压缩文件并流式传输,只要它是用-19压缩的(使用2作为压缩算法参数,即gzip) 普通gzip文件和kdb压缩文件之间的唯一区别是文件开头有几个字节 编辑(请参阅注释)谢谢,这不是真的-文件末尾的字节不同 因此,一个可能的解决方案是先用适当的字节数组预处理gzip文件(如果它们不是由-19!生成的) 对于使用kdb v3.4+流式执行的任何人,该功能已被引入 下面是.Q.
-11
不适用于命名管道,因此一个显而易见的解决方案是将gzip-cd
输出重定向到命名管道并将其传递到-11代码>不工作。-11
接受压缩文件并流式传输,只要它是用-19压缩的代码>(使用2作为压缩算法参数,即gzip)
普通gzip文件和kdb压缩文件之间的唯一区别是文件开头有几个字节
编辑(请参阅注释)谢谢,这不是真的-文件末尾的字节不同
因此,一个可能的解决方案是先用适当的字节数组预处理gzip文件(如果它们不是由-19!
生成的) 对于使用kdb v3.4+流式执行的任何人,该功能已被引入
下面是.Q.fps
的一个简单示例,首先通过命令行创建管道:
echo "aa" > test.pipe
在q会话中的下一步:
q).Q.fps[0N!]`:test.pipe
,"aa"
其中是一个用于显示文件内容的函数。您引用的wiki文章包含以下建议:“不要对日志文件使用流式压缩,因为在崩溃的情况下,日志文件将无法使用,因为它将丢失文件末尾的元信息。”这是指gzip元数据还是kx元数据?如果是后者,这似乎使你的答案无效。大概建议是不要写入压缩文件,如果文件已经压缩,q会这样做。问题是关于阅读,所以我认为这个建议不适用。我主要提到wiki警告,指出元数据写在压缩日志的末尾,而不是开头。我不确定这篇文章是指常规的gzip元数据还是kx特定的元数据。常规的gzip格式包含一个CRC和文件末尾的未压缩长度,但是kx压缩文件有完全不同的内容。这意味着“普通gzipped文件和kdb压缩文件之间的唯一区别是文件开头的几个字节”不是真的。顺便说一句,kx压缩文件的“魔法”头是8个字节,其中包含ASCII字符“kxzipped”,但与gzip在格式上的区别更大。