อาเธน่า / โอมเพี้ยง | ไม่สามารถจับคู่แถว ID ในการเข้าร่วมด้วยตนเอง
ฉันกำลังพยายามหาไบ - กรัมในคอลัมน์สตริง
ฉันทำตามแนวทางที่นี่แล้วแต่ 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
ปัญหาเฉพาะที่ฉันพบคือในบรรทัดสุดท้ายเมื่อฉันพยายามเข้าร่วมรหัสธุรกรรมด้วยตนเอง - มันจะส่งกลับศูนย์แถวเสมอ จะใช้งานได้ถ้าฉันเข้าร่วมโดยwl1.n = wl2.n-1
(ตำแหน่งบนอาร์เรย์) เท่านั้นซึ่งไม่มีประโยชน์หากฉันไม่สามารถ จำกัด ให้เป็น id เดียวกันได้
Athena ไม่สนับสนุนฟังก์ชัน ngrams โดย presto ดังนั้นฉันจึงเหลือแนวทางนี้
เบาะแสใด ๆ ที่ทำไมถึงใช้งานไม่ได้? ขอบคุณ!
คำตอบ
นี่คือการเก็งกำไร แต่ผมทราบว่า CTE ของคุณใช้ไม่มีlimit
order by
นั่นหมายความว่ากำลังส่งคืนชุดแถวโดยพลการ
แม้ว่าฐานข้อมูลบางส่วนจะกลายเป็น CTE แต่ก็มีหลายฐานข้อมูลไม่ พวกเขาเรียกใช้รหัสอย่างเป็นอิสระทุกครั้งที่มีการอ้างอิง ฉันเดาว่ารหัสทำงานอย่างอิสระและชุด 50 แถวโดยพลการไม่มีรหัสธุรกรรมเหมือนกัน
วิธีแก้ปัญหาหนึ่งคือการเพิ่มorder by transacdtion_id
ในแบบสอบถามย่อย