Athena / Presto | ID-Zeile kann beim Self-Join nicht übereinstimmen
Ich versuche, die Bi-Gramm auf eine String-Spalte zu bekommen.
Ich habe den Ansatz hier verfolgt, aber Athena / Presto gibt mir Fehler bei den letzten Schritten.
Quellcode bisher
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
Das spezifische Problem, das ich habe, ist in der allerletzten Zeile, wenn ich versuche, die Transaktions-IDs selbst zu verknüpfen - es werden immer null Zeilen zurückgegeben. Es funktioniert, wenn ich nur durch wl1.n = wl2.n-1
(die Position auf dem Array) beitrete, was nutzlos ist, wenn ich es nicht auf dieselbe ID beschränken kann.
Athena unterstützt die ngrams-Funktion von presto nicht, daher bleibt mir dieser Ansatz.
Irgendwelche Hinweise, warum das nicht funktioniert? Vielen Dank!
Antworten
Das ist Spekulation. Aber ich stelle fest, dass Ihr CTE limit
mit Nein verwendet order by
. Das bedeutet, dass ein beliebiger Satz von Zeilen zurückgegeben wird.
Obwohl einige Datenbanken CTEs materialisieren, tun dies viele nicht. Sie führen den Code jedes Mal unabhängig aus, wenn auf ihn verwiesen wird. Ich vermute, dass der Code unabhängig ausgeführt wird und der beliebige Satz von 50 Zeilen keine gemeinsamen Transaktions-IDs hat.
Eine Lösung wäre, order by transacdtion_id
die Unterabfrage hinzuzufügen.