KDB q:如何将表格转换为字符串?

问题描述 投票:0回答:2

我需要计算 KDB 中表的

md5
。然而,
md5
只能(据我所知)在字符串上调用。那么,如何将 KDB 中的表转换为单个字符串表示形式呢?只要结果是确定性的,它是否是人类可读的并不重要。

tab:flip `items`sales`prices!(`nut`bolt`cam`cog;6 8 0 3;10 20 15 20)
md5 tab / does not work
md5 string tab / does not work

非常感谢您的帮助!

string md5 kdb
2个回答
0
投票

这可以通过

.Q.s1

来实现
md5 .Q.s1 tab

此方法返回 x 的字符串表示形式。

还可以使用

.Q.s
生成表格的纯文本版本,或者使用
.h.jx
生成多行字符串格式,您还可以指定起始行,但
.Q.s1
直接转换为不带换行符的字符串,因此最适合您的目的.

https://code.kx.com/q/ref/dotq/#s1-string-representation


0
投票

基于字符串的输出根据控制台大小截断,因此在比较整个表时不可靠。

使用

-8!
将表序列化为字节,然后可以转换为字符来运行
md5
:

https://code.kx.com/q/kb/serialization/

q)md5 `char$-8!([] a:1 2 3 )
0xeb5cc58551051573c696ea6f746c0dc8

仍然需要注意的一项是数据属性:

https://code.kx.com/q/ref/set-attribute/

q)md5 `char$-8!([] a:1 2 3 )
0xeb5cc58551051573c696ea6f746c0dc8
q)md5 `char$-8!([] a:`g#1 2 3 )
0xda110d1ca3127bffe0a76ea21574f91d

您可以在列级别删除:

q)md5 `char$-8!{c:cols x;![x;();0b;c!{(#;enlist`;x)}each c]} ([] a:1 2 3 )
0xeb5cc58551051573c696ea6f746c0dc8
q)md5 `char$-8!{c:cols x;![x;();0b;c!{(#;enlist`;x)}each c]} ([] a:`g#1 2 3 )
0xeb5cc58551051573c696ea6f746c0dc8

注意:如果该列包含带有属性的进一步嵌套内容,则需要扩展上述内容。

© www.soinside.com 2019 - 2024. All rights reserved.