簡體   English   中英

在MySQL LOAD DATA INFILE中終止的字段

[英]FIELD TERMINATED BY in MySQL LOAD DATA INFILE

我有一個函數,可以為我提供有關在DynamoDb表上完成的更新/插入的數據。 對於每次更新,我都需要解析數據並將其映射到相應的MySQL表架構。 我將此數據加載到文件中並執行MySQL提供的LOAD DATA INFILE語句。

我的陳述看起來像這樣:

LOAD DATA FROM S3 FILE '%s' REPLACE INTO TABLE %s FIELD TERMINATED BY ',' LINES TERMINATED BY '\\n'"

文件中的每一行可能看起來像這樣。

orderNumber123,ABC先生,紐約第五街,100,17-12-12

但是,問題在於數據中的某些字段包含逗號“,”。 現在這會引起問題,因為SQL將此逗號解釋為字段的終止符。

故障陳述可能看起來像這樣。

orderNumber456,XYZ先生,新澤西州第三大街100號12-12-17

我可以提供什么FIELD TERMINATOR來避免此問題? 我了解沒有辦法完全防止這種情況,但我想知道什么是使這種情況不太可能發生的最佳方法。

我曾考慮過使用制表符,但這也可能是數據的一部分。

更新:

根據[Ike Walker]提供的答案,使用雙引號將字段括起來就可以了。 當然,這意味着我必須進一步修飾數據,但我懷疑這是唯一有保證的方法。

另外,如果字段中有引號,則SQL語句足夠智能,除非將其后跟終止符,否則不會將其識別為封閉字符(因此,在我們的示例中, ",將是終止字段的提示”)不幸的是,我有數據,該模式是字段的一部分。例如,

{type:long,范圍:“ LONG”,“ INT”,金額:100}

為了使SQL將其視為一個字段,我必須將每個雙引號替換為兩個雙引號。

{type:long,范圍:“” LONG“”,“” INT“”,數量:100}

更多關於此這里

如果字段以ENCLOSED BY字符開頭,則只有當該字段或行的TERMINATED BY序列緊隨其后,該字符的實例才被視為終止字段值。 為避免歧義,可以將字段值中ENCLOSED BY字符的出現次數加倍,並解釋為該字符的單個實例。 例如,如果指定了ENCLOSED BY'“',則引號的處理如下所示:

"The ""BIG"" boss"  -> The "BIG" boss
The "BIG" boss      -> The "BIG" boss
The ""BIG"" boss    -> The ""BIG"" boss

此處的典型解決方案是至少在值包含字段分隔符的情況下將值括在引號中。

例如,您可以這樣設置輸入格式:

foo, "hi, I am a value with a comma", bar 

然后,當您加載數據時,可以將其包括在LOAD DATA INFILE語句中:

FIELD TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM