यदि आप Talend के सदस्यता संस्करण का उपयोग कर रहे हैं, तो आप डायनामिक कॉलम प्रकार का उपयोग कर सकते हैं। आप "डायनामिक" प्रकार के अपने इनपुट के लिए एक कॉलम को परिभाषित कर सकते हैं और इसे अपने आउटपुट घटक में उसी प्रकार के कॉलम में मैप कर सकते हैं। यह गतिशील रूप से तालिका ए से कॉलम प्राप्त करेगा और उन्हें तालिका बी में समान कॉलम पर मैप करेगा। यह रहा एक उदाहरण
.
यदि आप टैलेंड ओपन स्टूडियो का उपयोग कर रहे हैं, तो चीजें थोड़ी मुश्किल हो जाती हैं क्योंकि टैलेंड इनपुट और आउटपुट घटकों के लिए कॉलम की एक सूची की अपेक्षा करता है जिसे डिजाइन समय पर परिभाषित करने की आवश्यकता होती है।
यहाँ एक समाधान है जिसे मैंने इस सीमा के आसपास काम करने के लिए एक साथ रखा है।
विचार सभी तालिका a के स्तंभों को सूचीबद्ध करना है जो तालिका b में मौजूद हैं। फिर इसे कॉलम की अल्पविराम से अलग सूची में परिवर्तित करें, मेरे उदाहरण में id,Theme,name
और इसे वैश्विक चर COLUMN_LIST
. में संग्रहित करें . tMap का दूसरा आउटपुट कॉलम की समान सूची बनाता है, लेकिन इस बार कॉलम के बीच सिंगल कोट्स डालता है (ताकि उन्हें CONCAT
के पैरामीटर के रूप में इस्तेमाल किया जा सके। बाद में फ़ंक्शन करें), फिर शुरुआत और अंत में सिंगल कोट्स जोड़ें, जैसे:"'", id,"','",Theme,"','",name,"'"
और इसे वैश्विक चर CONCAT_LIST
. में संग्रहीत करें ।
अगले सबजॉब पर, मैं table a
. को क्वेरी करता हूं CONCAT
. का उपयोग करके फ़ंक्शन, इसे संयोजित किए जाने वाले स्तंभों की सूची देता है CONCAT_LIST
, इस प्रकार एक ही कॉलम में प्रत्येक रिकॉर्ड को पुनः प्राप्त करना जैसे 'value1', 'value2',..etc
फिर अंत में मैं एक INSERT
निष्पादित करता हूं table b
. के विरुद्ध क्वेरी , वैश्विक चर COLUMN_LIST
. द्वारा दिए गए स्तंभों की सूची निर्दिष्ट करके , और CONCAT
. के परिणामस्वरूप एकल स्ट्रिंग के रूप में डाले जाने वाले मान फ़ंक्शन (row6.values
)।
यह समाधान सामान्य है, यदि आप अपने तालिका नामों को संदर्भ चर द्वारा प्रतिस्थापित करते हैं, तो आप इसका उपयोग किसी भी MySQL तालिका से डेटा को किसी अन्य तालिका में कॉपी करने के लिए कर सकते हैं।