如何解决稀疏表上的自联接
我在 S3 中有一张桌子(好吧,如果它改变了事情,那就是镶木地板文件),供 Presto/AWS Athena 查询。
里面有很多废话,但基本上结构是:
SessionId,TransactionId,SessionFailureType1,SessionFailureType2
123456,123-c-456,999999,1,123456,090-2-999,111-1-111,1
有些会话没有事务,许多会话没有失败。每个事务和会话开始都会得到一行。
这种情况很像将两张表合二为一,外键是 SessionId。
我正在尝试获取失败的事务,我认为这意味着我需要自己加入表,然后按 SessionId
分组。我已经尝试进行自联接以获取所有 TransactionId
:
SELECT TransactionId as trid,SessionId as ssid,SessionFailureType1 as f1,SessionFailureType2 as f2
FROM MyTable a join MyTable b on a.SessionId = b.SessionId
where b.SessionFailureType1 = 1 or b.SessionFailureType2 = 1
and a.TransactionId <> '';
但这给了我一堆结果,其中交易 ID 仍未填充,而且似乎不完整。我觉得我在这里错过了一个基本问题;也许我想要的不是连接而是......分叉?
解决方法
我正在尝试获取失败的交易,
如果要返回失败类型列之一不是 null
的会话的所有事务,请使用窗口函数:
select t.*
from (select t.*,count(SessionFailureType1) over (partition by sessionid) as cnt1,count(SessionFailureType2) over (partition by sessionid) as cnt2
from t
) t
where cnt1 > 0 or cnt2 > 0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。