मैं फ़ोरम स्नोपाइप -> लोड_टेबल <-> स्टेजिंग टेबल -> फाइनल टेबल पर मिले एक दृष्टिकोण का उपयोग करके स्नोफ्लेक में डेटा लोड कर रहा हूं मेरे पास एक टास्क ट्री है जो लोड_टेबल पर स्ट्रीम की जांच करता है और यदि यह डेटा पाता है, तो लोड_टेबल को स्वैप करता है स्टेजिंग_टेबल आगे के कार्य स्टेजिंग_टेबल को अंतिम टेबल में प्रोसेस करते हैं।

यह आम तौर पर ठीक काम करता है, लेकिन जो समस्या मैं देख रहा हूं वह यह है कि मैं लोड_टेबल या स्टेजिंग_टेबल पर अनाथ रिकॉर्ड के साथ समाप्त होता हूं और लोड_स्ट्रीम खाली होता है। यह अभी उस बिंदु पर है जहां भले ही मैं मैन्युअल रूप से लोड_टेबल में डेटा डालता हूं, स्ट्रीम अभी भी खाली के रूप में चिह्नित है, इसलिए कोई कार्य नहीं चलता है।

धाराओं वाली तालिकाओं की अदला-बदली करते समय अपेक्षित व्यवहार क्या है, क्या उपरोक्त व्यवहार समर्थित है या क्या मुझे किसी विकल्प को देखने की आवश्यकता है? लक्ष्य S3 से फ़ाइलों को एक अस्थायी तालिका में लोड करने के लिए स्नोपाइप का उपयोग करना है और प्रबंधन के लिए कभी भी बढ़ती स्टेजिंग तालिका के बिना उन्हें अंतिम तालिका में विलय करना है ...

धन्यवाद!

/ कुछ प्रयोग करने को संपादित करें और ऐसा लगता है कि जब तालिकाओं की अदला-बदली की जाती है तब भी धारा "मूल" तालिका को सुनती है, इसलिए किसी भी डेटा को अनदेखा कर देगा जो स्नोपाइप "नई" तालिका में लोड होता है, भले ही वह नई तालिका मूल के साथ बदल गई हो ...

2
user2771842 19 फरवरी 2021, 12:32
1
आप स्टेजिंग टेबल का उपयोग क्यों कर रहे हैं? मर्ज स्टेटमेंट को सीधे स्ट्रीम से क्यों न चलाएं? मुझे नहीं लगता कि टेबल स्वैप के लिए यह सही उपयोग-मामला है।
 – 
Simon D
19 फरवरी 2021, 16:25
उस परिदृश्य में मैं लोड तालिका से संसाधित रिकॉर्ड कैसे निकालूं?
 – 
user2771842
19 फरवरी 2021, 18:07
1
यदि आप एक append_only स्ट्रीम का उपयोग कर रहे हैं तो आप अपना मर्ज स्टेटमेंट चलाने के बाद तालिका को छोटा कर सकते हैं। कोई भी सम्मिलित रिकॉर्ड जो आपके मर्ज स्टेटमेंट द्वारा नहीं उठाया गया था, लेकिन इसे चलाते समय डाला गया था, लोड टेबल से हटा दिया जाएगा, लेकिन वे अभी भी स्ट्रीम में रहेंगे और मर्ज के अगले रन पर संसाधित होंगे।
 – 
Simon D
19 फरवरी 2021, 19:34
यहाँ सही है। आप अपनी प्रक्रिया को अत्यधिक जटिल बना रहे हैं और वास्तव में STREAMS के पूर्ण लाभों का लाभ नहीं उठा रहे हैं। बस इसके ऊपर एक स्ट्रीम के साथ एक टेबल है और सीधे स्ट्रीम से MERGE करें।
 – 
Mike Walton
21 फरवरी 2021, 01:29

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है कि SHOW STREAMS और DESCRIBE STREAM गलत जानकारी प्रदान करता है:

create or replace table test1 (v varchar);
create or replace table test2 (v1 varchar, v2 varchar);
create or replace stream test_stream_1 on table test1;
alter table test1 swap with test2;
show streams like 'test_stream_1';    

+---------------+------------------------+
|     name      |       table_name       |
+---------------+------------------------+
| TEST_STREAM_1 | GOKHAN_DB.PUBLIC.TEST1 |
+---------------+------------------------+

यह स्वैप ऑपरेशन के बाद GOKHAN_DB.PUBLIC.TEST2 को इंगित करना चाहिए! मेरा सुझाव है कि आप एक समर्थन मामला प्रस्तुत करें।

अच्छी बात यह है कि get_ddl सही परिणाम देता है:

select get_ddl('stream','test_stream_1');

+--------------------------------------------------------+
|           GET_DDL('STREAM','TEST_STREAM_1')            |
+--------------------------------------------------------+
| create or replace stream TEST_STREAM_1 on table TEST2; |
+--------------------------------------------------------+
0
Gokhan Atil 19 फरवरी 2021, 16:37
हाँ, ऐसा लगता है कि यह मुद्दा ठीक है! मुझे एक गुप्त संदेह है (कि मैं अभी तक साबित नहीं कर सकता) कि मेटा_डेटा रीफ्रेश होने में कुछ देरी हो रही है, ऐसा लगता है कि रातोंरात मेरी अनाथ तालिका संसाधित की गई थी (लेकिन जाहिर है कि इसका अधिक उपयोग नहीं है!)
 – 
user2771842
19 फरवरी 2021, 18:08