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
。
我正在尝试获取字符串列上的二元语法。
我遵循了 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
。