एथेना / प्रेस्टो | सेल्फ जॉइन पर ID रो का मिलान नहीं कर सकते
मैं एक स्ट्रिंग कॉलम पर द्वि-ग्राम प्राप्त करने की कोशिश कर रहा हूं।
मैंने यहाँ दृष्टिकोण का पालन किया है लेकिन एथेना / प्रेस्टो मुझे अंतिम चरणों में त्रुटि दे रहा है।
स्रोत कोड अब तक
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
(सरणी पर स्थिति) से जुड़ता हूं जो बेकार है अगर मैं इसे एक ही आईडी में नहीं डाल सकता।
एथेना प्रेस्टो द्वारा एनग्राम्स फंक्शन का समर्थन नहीं करता है, इसलिए मैं इस दृष्टिकोण के साथ बचा हुआ हूं।
कोई सुराग क्यों यह काम नहीं कर रहा है? धन्यवाद!
जवाब
यह अटकलबाजी है। लेकिन मैं ध्यान देता हूं कि आपका CTE limit
नहीं के साथ उपयोग कर रहा है order by
। इसका मतलब है कि पंक्तियों का एक मनमाना सेट लौटाया जा रहा है।
हालांकि कुछ डेटाबेस सीटीई को भौतिक करते हैं, कई नहीं करते हैं। प्रत्येक बार संदर्भित होने पर वे स्वतंत्र रूप से कोड चलाते हैं। मेरा अनुमान है कि कोड स्वतंत्र रूप से चलाया जाता है और 50 पंक्तियों के मनमाने सेट का कोई लेन-देन आईडी नहीं है।
एक समाधान order by transacdtion_id
उपनगर में जोड़ना होगा ।