導入具有不同可用標題的每日 csv
我每天都會收到來自外部公司的 csv,它為我們收集回饋。
無用的 csv 標題各不相同。可以有任何標題組合。例如:
第1天:標題1,標題2,標題3,標題4,標題5
第2天:標題1,標題2,標題4,標題6
第3天:標題1,標題2,標題7,標題8
第4天:標題1,標題2,標題3,標題4,標題5
我們有 18 個月的積壓文件(直到現在還沒有人對這些數據做任何事情),到目前為止,我發現了 22 種不同的組合……
我知道所有潛在的標題是什麼,所以我可以擁有一個包含所有適當列的 SQL 表,但我正在努力處理導入的差異。
有沒有辦法在 SSIS 中處理這個問題?我看過 bcp 和 openrowset 但我似乎無法讓它工作。
由於每天都會收到此文件,因此我需要一個 sql 作業,將它們導入我的表以進行報告。我只能創建一個將導入固定平面文件的 SSIS 包,但我需要它是動態的。最壞的情況是擁有 22+ 個不同的 SSIS 包並為給定的可用標題執行特定的 1,但是我需要一種自動讀取 csv 結構的方法來決定使用哪個包。
我迷路了,所以有人有方向嗎?
SQL 2016 (13.0.5622.0)
非常感謝
考慮一個包含兩個不同文件的簡化場景,每個文件包含不同的數據子集。
abc.csv:
a,b,c 1,a,a 2,b,b 3,c,c 4,d,d
abd.csv:
a,b,d 1,a,1 4,d,4 5,e,5 6,f,6
現在,我們可以使用 PowerShell 將文件、
Select
列導入已知的、一致的數字和順序,然後將其導出回帶有可預測文件的 csv:Import-Csv abc.csv | Select a,b,c,d,e,f,g | Export-Csv abc_cleansed.csv -NoTypeInformation Import-Csv abd.csv | Select a,b,c,d,e,f,g | Export-Csv abd_cleansed.csv -NoTypeInformation
這將生成兩個具有通用、可預測文件格式的新文件。
abc_cleansed.csv:
"a","b","c","d","e","f","g" "1","a","a",,,, "2","b","b",,,, "3","c","c",,,, "4","d","d",,,,
abd_cleansed.csv:
"a","b","c","d","e","f","g" "1","a",,"1",,, "4","d",,"4",,, "5","e",,"5",,, "6","f",,"6",,,
注意:我在最初的 csv 文件中省略了雙引號,PowerShell 也將它們添加到其中。您可以刪除它們,但恕我直言,這絕對是數據質量的有益功能。
現在,您可以簡單地建構一個數據管道,在其中獲取輸入文件,進行轉換以清理格式,然後選擇這些清理後的文件以導入它們。根據您的流程,您可以在單個 SSIS 包中完成所有這些操作,或者建構單獨的數據清理/數據導入流程。