雅典娜/普雷斯托 |无法匹配自联接的 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