विभिन्न व्यावसायिक इकाइयों से व्यय फ़ाइलें (सीएसवी प्रारूप) हैं, जिसमें शीर्षलेख और पाद लेख हैं। फ़ाइलें अलग-अलग नामों की हैं Expense__YYYYMMDD.csv
यू-एसक्यूएल में संबोधित करने के लिए मेरे पास निम्न आवश्यकताएं हैं।
- शीर्ष लेख और पाद लेख निकालें। मैं शीर्षलेख को छोड़ने के लिए 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
साथ ही, शीर्ष लेख और पादलेख में वास्तविक डेटा की तुलना में स्तंभों की संख्या कम होती है।
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.
अग्रिम में धन्यवाद!
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);
मेरे परिणाम:
अब फ़ाइल साफ़ है, आप सामान्य तरीकों का उपयोग करके आयात कर सकते हैं।
अपने दूसरे अंक के लिए, आपको वर्चुअल कॉलम चेक इस समाधान का उपयोग करना चाहिए।
आपके पहले अंक के लिए, शायद आपको कस्टम एक्सट्रैक्टर बनाने का प्रयास करना चाहिए यदि आप पाद लेख पैटर्न जानते हैं, तो निकालने वाले तर्क में, आप पाद लेख को हटा सकते हैं। यदि आप फ़ाइल और पाद लेख के बारे में अधिक जानकारी प्रदान कर सकते हैं तो हम आपको अधिक सटीक संभावित समाधान/फिक्स/विचार दे सकते हैं :)
संबंधित सवाल
नए सवाल
azure
Microsoft Azure सेवा क्लाउड कंप्यूटिंग प्लेटफ़ॉर्म के रूप में सेवा और अवसंरचना के रूप में एक प्लेटफ़ॉर्म है। Azure से संबंधित प्रोग्रामिंग प्रश्नों के लिए इस टैग का उपयोग करें। सुपर यूजर या सर्वर फाल्ट में सामान्य सर्वर सहायता प्राप्त की जा सकती है।