2016-01-21 9 views
6

परिदृश्य पाने के लिए कैसे:पुन: व्यवस्थित करें सीएसवी इनपुट तय स्तंभ के साथ कॉलम pentaho में

मैं बनाया है csv फ़ाइल से तालिका में डेटा लोड करने के लिए परिवर्तन और मैं csv फ़ाइल में निम्न स्तंभ है:

  1. CUSTOMER_ID
  2. Company_Id
  3. Employee_Name

लेकिन उपयोगकर्ता के साथ इनपुट फ़ाइल दे सकते हैं स्तंभ आदेश (यादृच्छिक क्रम)

  1. Employee_Name
  2. रूप Company_Id
  3. CUSTOMER_ID

इसलिए, अगर मैं के अनुसार लोड सही स्तंभ मान केतली जाएगा फ़ाइल जो यादृच्छिक स्तंभ आदेश है लोड करने का प्रयास, कॉलम नाम ...?

+0

यदि आप कॉलम हेडर हमेशा फाइल में थे, तो संभवतः आप इसे 'यूडीजेसी' या जावास्क्रिप्ट के साथ कर सकते हैं, लेकिन सबसे अच्छा समाधान शायद उपयोगकर्ताओं पर वापस धक्का देना और उन्हें आपको देना एक उचित रूप से स्वरूपित फ़ाइल। –

+0

हाय @ ब्रायन.डी.मेर्स क्या आप मुझे मेरे प्रश्न के साथ आगे बढ़ने के लिए यूडीजेसी या जावास्क्रिप्ट के साथ केआरआर फ़ाइल के साथ कुछ नमूना उदाहरण दे सकते हैं ... अत्यधिक appericiated – yuvi

उत्तर

3

ETL Metadata Injection का उपयोग करके आप इस तरह एक परिवर्तन का उपयोग या तो डेटा को सामान्य बनाने में कर सकते हैं, या अपने डेटाबेस में संग्रहीत करने के:

Metadata transformation

तो फिर तुम सिर्फ इतना है कि परिवर्तन के लिए सही डेटा भेजने की जरूरत है। आप सीएसवी से हेडर लाइन पढ़ सकते हैं, और ETL Metadata Injection द्वारा उपयोग किए गए प्रारूप में कनवर्ट करने के लिए Row Normaliser का उपयोग कर सकते हैं।

मैंने यहां एक त्वरित उदाहरण शामिल किया है: csv_inject on Dropbox, यदि आप ऐसा कुछ करते हैं और इसे प्रति सीएसवी फ़ाइल चलाने वाले किसी चीज़ से चलाते हैं तो इसे काम करना चाहिए।

+0

आपका लिंक काम नहीं करता है – Stevetech

0

आप अपने जावास्क्रिप्ट के रूप में कुछ इस तरह की कोशिश कर सकते:

//Script here 

var seen; 
trans_Status = CONTINUE_TRANSFORMATION; 
var col_names = ['Customer_Id','Company_Id','Employee_Name']; 
var col_pos; 
if (!seen) { 
    // First line 
    trans_Status = SKIP_TRANSFORMATION; 
    seen = 1; 
    col_pos = [-1,-1,-1]; 
    for (var i = 0; i < col_names.length; i++) { 
     for (var j = 0; j < row.length; j++) { 
      if (row[j] == col_names[i]) { 
       col_pos[i] = j; 
       break; 
      } 
     } 
     if (col_pos[i] === -1) { 
      writeToLog("e", "Cannot find " + col_names[i]); 
      trans_Status = ERROR_TRANSFORMATION; 
      break; 
     } 
    } 
} 

var Customer_Id = row[col_pos[0]]; 
var Company_Id = row[col_pos[1]]; 
var Employee_Name = row[col_pos[2]]; 

यहाँ .ktr मैंने कोशिश की है: csv_reorder.ktr

(संपादित करें, यहां परीक्षण csv फ़ाइलें हैं) 1.csv:

Customer_Id,Company_Id,Employee_Name 
cust1,comp1,emp1 

2.csv:

Employee_Name,Company_Id,Customer_Id 
emp2,comp2,cust2 
+0

क्या आप मुझे मेरे उदाहरण के आधार पर नमूना दे सकते हैं .. मुझे नहीं मिल रहा है आपका ktr..using जावा कोड .. जावा कोड – yuvi

+0

की बजाय प्रक्रिया के लिए कोई अन्य तरीका है यह आपके उदाहरण पर आधारित है। आपका मतलब क्या है "अपना केआरआर नहीं मिल रहा है"? – bolav

+0

मैंने आपके csv_reorder.ktr की कोशिश की है .. लेकिन मुझे अपेक्षित आउटपुट नहीं मिल रहा है – yuvi

2

ओह, यह कुछ बुरा जावास्क्रिप्ट है!

ऐसा करने का तरीका मेटाडाटा इंजेक्शन के साथ है। नमूने देखें, लेकिन मूल रूप से आपको एक टेम्पलेट चाहिए जो फ़ाइल को पढ़ता है, और इसे वापस लिखता है। फिर आप हेडिंग को समझने के लिए एक और पैरेंट ट्रांसफ़ॉर्मेशन का उपयोग करें, उस टेम्पलेट को कॉन्फ़िगर करें और फिर इसे निष्पादित करें।

पीडीआई नमूने फ़ोल्डर में नमूने हैं, और गीथब पर मैट कास्टर्स ब्लूप्रिंट्स प्रोजेक्ट में "फ़ाइल प्रारूप को चित्रित करना" उदाहरण भी देखें।

+0

हू। मैंने इसे 'ईटीएल मेटाडेटा इंजेक्शन' चरण के साथ करने की कोशिश की लेकिन, इसे पहले कभी नहीं इस्तेमाल किया, मुझे यह काम नहीं मिला। मुझे लगता है कि मुझे फिर कोशिश करनी चाहिए। अतीत में मैंने इस तरह की पूर्व-संसाधित चीजें पाइथन लिपि के साथ की हैं। –

+0

यह एक बहुत ही रचनात्मक उत्तर नहीं है। सबसे पहले आप कह रहे हैं कि समाधान खराब है, यह कहने के बिना कि इसके बारे में क्या बुरा है। और फिर आप कह रहे हैं कि इसे हल करने के बारे में बताने के बिना एक और समाधान मौजूद है। मैंने आपके उत्तर से कुछ नहीं सीखा है सिवाय इसके कि एक और जवाब मौजूद हो सकता है। – bolav

+0

@codek ... क्या आप उदाहरण देने और मुझे समझा सकते हैं ... अग्रिम धन्यवाद – yuvi

0

इनपुट फ़ाइल को अस्वीकार करने का मानना ​​एक विकल्प नहीं है जिसका मूल रूप से आपके पास 4 समाधान हैं।

  1. एक बाहरी संपादक में क्षेत्रों को पुन: व्यवस्थित (एक्सेल का उपयोग नहीं करते, तो यह दिनांक होते हैं) अपने परिवर्तन स्तंभ शीर्ष लेखों का पता लगाने और फ़ाइल को पुन: व्यवस्थित करने के लिए भीतर
  2. उपयोग कोड।
  3. बोलाव
  4. द्वारा प्रस्तावित मेटाडाटा इंजेक्शन का उपयोग करें। इसकी आवश्यकता है:

ए। फ़ाइल को एक अस्थायी डेटाबेस में लोड करें। बी। फ़ील्ड को पुनर्प्राप्त करने के लिए एक एसक्यूएल कथन का उपयोग करें (खंड द्वारा ऑर्डर के साथ एक चयन का उपयोग करें) सी। फ़ाइल को सही क्रम में आउटपुट

संबंधित मुद्दे