Athena / Presto | Tidak dapat mencocokkan baris ID saat bergabung sendiri
Saya mencoba mendapatkan bi-gram pada kolom string.
Saya telah mengikuti pendekatan di sini tetapi Athena / Presto memberi saya kesalahan pada langkah terakhir.
Kode sumber sejauh ini
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
Masalah spesifik yang saya alami ada di baris terakhir, ketika saya mencoba bergabung sendiri dengan id transaksi - selalu mengembalikan baris nol. Ini berfungsi jika saya bergabung hanya dengan wl1.n = wl2.n-1
(posisi pada array) yang tidak berguna jika saya tidak dapat membatasinya ke id yang sama.
Athena tidak mendukung fungsi ngrams dengan presto, jadi saya pergi dengan pendekatan ini.
Ada petunjuk mengapa ini tidak berhasil? Terima kasih!
Jawaban
Ini spekulasi. Tapi saya perhatikan bahwa CTE Anda menggunakan limit
dengan no order by
. Itu berarti kumpulan baris yang berubah - ubah dikembalikan.
Meskipun beberapa database mewujudkan CTE, banyak yang tidak. Mereka menjalankan kode secara independen setiap kali dirujuk. Dugaan saya adalah bahwa kode tersebut dijalankan secara independen dan kumpulan 50 baris yang sewenang-wenang tidak memiliki ID transaksi yang sama.
Salah satu solusinya adalah menambahkan order by transacdtion_id
subquery.