Athena / Presto | Nie można dopasować wiersza identyfikatora w łączeniu własnym
Próbuję uzyskać bi-gramy na kolumnie strunowej.
Podążyłem tutaj za podejściem , ale Athena / Presto podaje mi błędy na ostatnich krokach.
Dotychczasowy kod źródłowy
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
Konkretny problem, który mam, znajduje się w ostatniej linii, kiedy próbuję samodzielnie dołączyć identyfikatory transakcji - zawsze zwraca zero wierszy. Działa, jeśli dołączam tylko przez wl1.n = wl2.n-1
(pozycję w tablicy), co jest bezużyteczne, jeśli nie mogę ograniczyć tego do tego samego identyfikatora.
Athena nie obsługuje funkcji ngrams firmy presto, więc mam takie podejście.
Jakieś wskazówki, dlaczego to nie działa? Dzięki!
Odpowiedzi
To są spekulacje. Ale zauważam, że twój CTE używa limit
bez order by
. Oznacza to, że zwracany jest dowolny zestaw wierszy.
Chociaż niektóre bazy danych materializują CTE, wiele z nich nie. Uruchamiają kod niezależnie za każdym razem, gdy występuje do niego odwołanie. Domyślam się, że kod jest uruchamiany niezależnie, a dowolny zestaw 50 wierszy nie ma wspólnych identyfikatorów transakcji.
Jednym z rozwiązań byłoby dodanie order by transacdtion_id
podzapytania.