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

稀疏表上的自联接

如何解决稀疏表上的自联接

我在 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 举报,一经查实,本站将立刻删除。