विभिन्न व्यावसायिक इकाइयों से व्यय फ़ाइलें (सीएसवी प्रारूप) हैं, जिसमें शीर्षलेख और पाद लेख हैं। फ़ाइलें अलग-अलग नामों की हैं Expense__YYYYMMDD.csv

यू-एसक्यूएल में संबोधित करने के लिए मेरे पास निम्न आवश्यकताएं हैं।

  1. शीर्ष लेख और पाद लेख निकालें। मैं शीर्षलेख को छोड़ने के लिए SkipNRows:1 का उपयोग करता हूं। मुझे पादलेख को बाहर करने का कोई विकल्प नहीं मिला। "साइलेंट" पैरामीटर पर एक नज़र थी, लेकिन यह प्रलेखन के अनुसार एन्कोडिंग त्रुटियों (यदि कोई हो) को बाय-पास कर देगा। क्या कोई अन्य पैरामीटर/तरीका है जिसका उपयोग मैं फ़िल्टर को बाहर करने के लिए कर सकता हूं।

फ़ाइल संरचना इस प्रकार है:

1   ACTUAL  1/03/2018   SourceSystem12  BUNIT3                          
2   00900_AB    H6720180205gv   1   1/03/2018   XYZ 1000004 4500532 Imogen      userid1 2/03/2018
2   00900_AB    H6720180205ub   1   1/03/2018   XYZ 1000004 4500532 Imogen1     userid2 2/03/2018
2   00900_AB    H6720180205wp   1   1/03/2018   XYZ 1000004 4500532 Imogen      userid1 2/03/2018
2   00900_AB    H6720180205yc   1   1/03/2018   XYZ 1000004 4500532 Imogen      userid2 2/03/2018
9   90  532 68060.24    62916.75    5143.49 BUnit3  1/03/2018   BUMonthYear         

साथ ही, शीर्ष लेख और पादलेख में वास्तविक डेटा की तुलना में स्तंभों की संख्या कम होती है

  1. DatalakeAnalytics में संग्रहीत करने से पहले मुझे इन सभी फ़ाइलों को एक फ़ाइल में समेकित करने की आवश्यकता है। एकत्रीकरण के भाग के रूप में, फ़ाइल नाम से Businessunit को अंतिम आउटपुट फ़ाइल में एक कॉलम के रूप में शामिल किया जाना चाहिए।

    उदा., यदि नीचे के रूप में अलग-अलग फ़ाइल नामों के साथ समान संरचना की 2 स्रोत फ़ाइलें हैं

    Expense_HR_20180801.csv
    

    कॉलम 1, कॉलम 2, कॉलम 3

    Expense_IT_20180801.csv
    

    कॉलम 1, कॉलम 2, कॉलम 3

    अंतिम आउटपुट फ़ाइल होनी चाहिए:

    Expense_20180801.csv
    

    बिजनेस यूनिट, कॉलम 1, कॉलम 2, कॉलम 3

पर कोई सुझाव/मार्गदर्शन

   a. how to remove the footer from the individual CSVs, and 
   b. how to extract the businessunit from the filename and include it as one of the columns is much appreciated.

अग्रिम में धन्यवाद!

1
Rmani 1 अगस्त 2018, 00:33
क्या पाद लेख के पाठ में ऐसा कुछ है जो इसे एक के रूप में पहचान सकता है?
 – 
Peter Bons
1 अगस्त 2018, 07:53

2 जवाब

ऐसा लगता है कि पहला कॉलम पंक्ति प्रकार के लिए एक डिस्क्रिप्टर है, जहां 1 शीर्षलेख है, 2 मुख्य डेटा है और 9 पाद लेख है। इसका एक तरीका यह है कि डेटा को एक सीमांकक का उपयोग करके एक पंक्ति के रूप में आयात किया जाए जो डेटा में मौजूद नहीं है, फिर उन पंक्तियों को हटा दें जिनकी आपको आवश्यकता नहीं है, उदाहरण के लिए .net स्ट्रिंग विधियों जैसे StartsWith का उपयोग करना। आभासी कॉलम< /ए> यू-एसक्यूएल की सुविधा आपको आसानी से फ़ाइल नाम के कुछ हिस्सों को अपने रोसेट में शामिल करने की अनुमति देती है। यहाँ एक सरल उदाहरण है:

// Import the file as one column, clean out the header and foot, then output again
DECLARE @inputFile string = @"\input\Expense_{businessUnit}_20180801.csv";

@input =
    EXTRACT col1 string,
            businessUnit string
    FROM @inputFile
    USING Extractors.Text(delimiter : '†');


@output =
    SELECT *
    FROM @input
    WHERE NOT col1.StartsWith("1 ")
      AND NOT col1.StartsWith("9 ");


OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv(quoting:false);

मेरे परिणाम:

My results

अब फ़ाइल साफ़ है, आप सामान्य तरीकों का उपयोग करके आयात कर सकते हैं।

1
wBob 6 अगस्त 2018, 01:40

अपने दूसरे अंक के लिए, आपको वर्चुअल कॉलम चेक इस समाधान का उपयोग करना चाहिए।

आपके पहले अंक के लिए, शायद आपको कस्टम एक्सट्रैक्टर बनाने का प्रयास करना चाहिए यदि आप पाद लेख पैटर्न जानते हैं, तो निकालने वाले तर्क में, आप पाद लेख को हटा सकते हैं। यदि आप फ़ाइल और पाद लेख के बारे में अधिक जानकारी प्रदान कर सकते हैं तो हम आपको अधिक सटीक संभावित समाधान/फिक्स/विचार दे सकते हैं :)

0
DraganB 1 अगस्त 2018, 14:57
धन्यवाद, दूसरे मुद्दे को संभालने में सक्षम था। एक नमूना फ़ाइल संरचना जोड़ा है।
 – 
Rmani
3 अगस्त 2018, 05:10