KDB技术问询:如何获取表中字段内拆分后的全局唯一值
解决KDB表中分号分隔字符串的全局唯一元素提取问题
我明白你的需求——要从表中columnA字段的所有分号分隔字符串里,提取出所有单个元素的全局唯一值,而不是仅对整行或整列去重。你之前尝试的select distinct from flip indicators只是做了行级的转换和去重,没有拆分每个字符串内部的元素,所以达不到目标。
正确的实现步骤
我们可以通过KDB的字符串拆分、列表展平和去重函数组合来实现:
- 拆分每个字符串:用
vs函数将每行的columnA值按分号";"拆分成字符串列表。 - 展平嵌套列表:用
raze把所有行拆分后的嵌套列表展开成一个一维的全局元素列表。 - 去重:用
distinct对展平后的列表提取唯一值。 - 可选:合并为分号分隔字符串:如果需要像示例那样输出分号连接的结果,用
sv函数把唯一值列表拼接起来。
具体查询语句
假设你的表名为t,字段是columnA,查询语句如下:
获取唯一值列表
distinct raze columnA vs ";" from t
获取分号分隔的结果字符串
";" sv distinct raze columnA vs ";" from t
示例验证
用你给出的测试数据创建表:
t: ([] columnA: ("AZ;B;C";"AT;B;D";"E;F";"C;D";"A;D";"A"))
执行第一个查询会得到:
"A";"AT";"AZ";"B";"C";"D";"E";"F"
执行第二个查询会得到你期望的结果:
"A;AT;AZ;B;C;D;E;F"
各函数的作用说明
columnA vs ";" from t:遍历表中每行的columnA,将每个分号分隔的字符串拆分成子元素列表,返回一个嵌套列表。raze:把嵌套列表"拍平"成一维列表,让所有子元素处于同一层级。distinct:对一维列表去重,保留每个元素的唯一实例。";" sv:将唯一值列表用分号连接成单个字符串,符合你想要的输出格式。
内容的提问来源于stack exchange,提问作者duckman
相关产品推荐
相关产品推荐

