如何解决雅典娜/普雷斯托 |无法匹配自联接的 ID 行
我正在尝试获取字符串列上的二元组。
我遵循了 here 的方法,但 Athena/Presto 在最后的步骤中给了我错误。
目前的源代码
with word_list as (
SELECT
transaction_id,words,n,regexp_extract_all(f70_remittance_info,'([a-zA-Z]+)') as f70,f70_remittance_info
FROM exploration_transaction
cross join unnest(regexp_extract_all(f70_remittance_info,'([a-zA-Z]+)')) with ordinality AS t (words,n)
where cardinality((regexp_extract_all(f70_remittance_info,'([a-zA-Z]+)'))) > 1
and f70_remittance_info is not null
limit 50 )
select wl1.f70,wl1.n,wl1.words,wl2.f70,wl2.n,wl2.words
from word_list wl1
join word_list wl2
on wl1.transaction_id = wl2.transaction_id
我遇到的具体问题是在最后一行,当我尝试自行加入事务 ID 时 - 它总是返回零行。如果我只通过 wl1.n = wl2.n-1
(数组上的位置)加入它确实有效,如果我不能将它限制为相同的 id,这将毫无用处。
Athena 不支持 presto 的 ngrams 功能,所以我只剩下这种方法了。
为什么这不起作用的任何线索? 谢谢!
解决方法
这是猜测。但我注意到您的 CTE 使用的是 limit
而没有 order by
。这意味着正在返回一组任意行。
尽管一些数据库实现了 CTE,但许多数据库没有实现。每次引用时,它们都会独立运行代码。我的猜测是代码是独立运行的,任意一组 50 行没有共同的事务 ID。
一种解决方案是在子查询中添加 order by transacdtion_id
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。