Athena/Presto |自连接时无法匹配 ID 行

Athena/Presto | Can't match ID row on self join

我正在尝试获取字符串列上的二元语法。

我遵循了 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 时 - 它总是 returns 零行。如果我只通过 wl1.n = wl2.n-1 (数组上的位置)加入,它确实有效,如果我不能将它限制为相同的 id,这是无用的。

Athena 不支持 presto 的 ngrams 功能,所以我只剩下这种方法了。

为什么这不起作用的任何线索? 谢谢!

这是猜测。但我注意到您的 CTE 使用 limit 而没有 order by。这意味着正在返回一组 任意 行。

尽管一些数据库具体化了 CTE,但许多数据库并未具体化。他们 运行 每次引用代码时都是独立的。我的猜测是代码是 运行 独立的,任意 50 行的集合没有共同的事务 ID。

一种解决方案是在子查询中添加 order by transacdtion_id