微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

clickhouse 修改 arry 中的数组

如何解决clickhouse 修改 arry 中的数组

给定以下查询

SELECT
    arrayZip(Groups.Names,Groups.scores) AS ZipGroups,arrayZip(Symbols.Names,Symbols.scores) AS ZipSymbols
FROM rspamd
WHERE (IsBayes = 'spam') AND ((Action = 'no action') OR (Action = 'greylist')) AND (score <= 6.3) AND notEmpty(Symbols.Names) AND ((Date >= (Now() - toIntervalHour(72))) AND (Date <= Now()))
ORDER BY score DESC LIMIT 1

这将返回如下内容

Row 1:
──────
ZipGroups:  [('MX',0.5),('policies',-0.9),('reputation',1.5636996),('mime_types',-0.1),('headers',('dkim',-0.2),('arc',0),('dmarc',-1),('Message ID',('url',1),('statistics',3.796762),('neural',('spf',-0.2)]
ZipSymbols: [('ARC_NA',('BAYES_SPAM',('R_DKIM_ALLOW',('MX_INVALID',('FROM_HAS_DN',('MV_CASE',('TO_MATCH_ENVRCPT_ALL',('MIME_GOOD',('R_SPF_ALLOW',('URI_COUNT_ODD',('RCPT_COUNT_ONE',('MID_RHS_MATCH_FROMTLD',('TO_DN_ALL',('DKIM_TRACE',('Dmarc_POLICY_ALLOW',('NEURAL_HAM_SHORT',('IP_REPUTATION_SPAM',('RCVD_COUNT_ZERO',('FROM_EQ_ENVFROM',('MIME_TRACE',('ASN',0)]

我发现结果非常难以理解,并想对其进行转换。我使用“重划线”。我可以使用 JSON 作为显示选项。得到如下结果会更好:

["key1": value1,"key2": value2,...]

[更新时间 2021-02-17 11:00 CET]

来自数组的值的来源是:

Symbols.Names 和 Symbols.scores。他们以 1:1 匹配。所以每条 sql 记录都有这两个字段。我想要一个 JSON 格式的组合输出

这是来自 sql一个示例记录:

Groups.Names:   ['statistics','policies','reputation','mime_types','headers','local','arc','Message ID','body','neural']
Groups.scores:  [-2.2,-0.7413712,-2.2,2.1666667,-1]
Symbols.Names:  ['ARC_NA','RCVD_VIA_SMTP_AUTH','TO_DOM_EQ_FROM_DOM','BAYES_HAM','FROM_HAS_DN','LOCAL_Meta_LEARN_HAM_1','MV_CASE','TO_MATCH_ENVRCPT_ALL','MIME_GOOD','PREVIoUSLY_DELIVERED','HAS_ATTACHMENT','RCPT_COUNT_ONE','GENERIC_REPUTATION','TO_DN_ALL','NEURAL_HAM_SHORT','HAS_X_PRIO_THREE','RCVD_COUNT_ONE','SIGNED_PGP','POLICY_SUBMISSION','MIME_TRACE','R_MIXED_CHARSET','ASN','RCVD_TLS_ALL','MID_RHS_MATCH_FROM','FROM_EQ_ENVFROM']
Symbols.scores: [0,0.5,-0.2,-1,-2,1.6666666,0]

对于上面给出的示例,我希望得到这样的符号结果:

{
  "ARC_NA": 0,"BAYES_SPAM": 3.796762,"R_DKIM_ALLOW": -0.2,"MX_INVALID": 0.5,"FROM_HAS_DN": 0,"MV_CASE": 0.5,"TO_MATCH_ENVRCPT_ALL": 0,"MIME_GOOD": -0.1,"R_SPF_ALLOW": -0.2,"URI_COUNT_ODD": 1,"RCPT_COUNT_ONE": 0,"MID_RHS_MATCH_FROMTLD": 0,"TO_DN_ALL": 0,"DKIM_TRACE": 0,"Dmarc_POLICY_ALLOW": -1,"NEURAL_HAM_SHORT": -1,"IP_REPUTATION_SPAM": 1.5636996,"RCVD_COUNT_ZERO": 0,"FROM_EQ_ENVFROM": 0,"MIME_TRACE": 0,"ASN": 0
}

[/更新]

是否有可能以某种方式转换查询以获得如图所示的结果?

解决方法

SELECT formatRow('JSONEachRow',x,y) AS z
FROM
(
    SELECT
        number AS x,number / 3 AS y
    FROM numbers(3)
)

Query id: 1413bd9f-bd32-48fc-b1e0-ac4eadd41f11

┌─z────────────────────────────────┐
│ {"x":"0","y":0}
                  │
│ {"x":"1","y":0.3333333333333333}
 │
│ {"x":"2","y":0.6666666666666666}
 │
└──────────────────────────────────┘
,
p+geom_rect(data= Reces_table,inherit.aes = FALSE,aes(xmin=Start,xmax=End,ymin=-Inf,ymax=+Inf,fill='deeppink',alpha=0.2))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。