Athena / Presto | Tidak dapat mencocokkan baris ID saat bergabung sendiri

Jan 04 2021

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

GordonLinoff Jan 04 2021 at 20:08

Ini spekulasi. Tapi saya perhatikan bahwa CTE Anda menggunakan limitdengan 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_idsubquery.