我在 Azure 資料湖中有一個 CSV 檔案,當使用 notepad 打開時,它看起來像這樣:
a,b,c
d,e,f
g,h,i
j,"foo
bar,baz",l
在記事本 (查看所有符號)中檢查后,它向我顯示了這一點:
a,b,c[CR][LF]
d,e,f[CR][LF]
g,h,i[CR][LF]
j,"foo[LF]
[LF]
bar,baz",l[CR][LF]
也就是說,每行之后的正常 Windows 回車和換行內容。除了其中一個專欄有人插入了這樣一個奇特的故事之外:
foo
bar, baz
我注入 CSV 的 TSQL 代碼如下所示:
COPY INTO
dbo.SalesLine
FROM
'https://mydatalakeblablabla/folders/myfile.csv'
WITH (
ROWTERMINATOR = '0x0d', -- Tried \n \r\n , 0x0d0a here
FILE_TYPE = 'CSV',
FIELDQUOTE = '"',
FIELDTERMINATOR = ',',
CREDENTIAL = (IDENTITY = 'Managed Identity') --Used to access datalake
)
但是查詢不起作用。SSMS 中的常見錯誤訊息是:
資料檔案中第 4 行第 2 列 (NAME) 的批量加載資料轉換錯誤(指定代碼頁的型別不匹配或無效字符)
我無法更正資料湖中的錯誤行或以任何方式修改 CSV。顯然它是包含真實資料的更大檔案,但我舉了一個簡單的例子。
如何修改或重新撰寫 TSQL 代碼以在讀取 CSV 時更正它?
uj5u.com熱心網友回復:
我重新創建了一個類似的檔案并將其上傳到我的資料湖和無服務器 SQL 池似乎管理得很好:
SELECT *
FROM
OPENROWSET(
BULK 'https://somestorage.dfs.core.windows.net/datalake/raw/badFile.csv',
FORMAT = 'CSV',
????????PARSER_VERSION = '2.0'
) AS [result]
我的結果:

這似乎是一種解決方法,但如果無服務器中改進的決議器可以輕松解決此類問題,那么為什么不使用整個套件,即 Azure Synapse Analytics。您可以將無服務器查詢用作 Synapse 管道中復制活動的源,并將其加載到您的專用 SQL 池中,這與使用COPY INTO命令的結果相同。
在過去,我做過諸如撰寫特殊決議例程之類的作業,將檔案加載為一列并將其拆分到資料庫中或使用正則運算式,但如果有一個簡單的解決方案,為什么不使用它。

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428824.html
上一篇:更改csvpython的標題
