2012-09-14 21 views
7

在下面給出的示例中,最後一行未上傳。我得到一個錯誤:報價和字段分隔符之間的數據

Data between close double quote (") and field separator: 

這看起來像,因爲所有的管道符號之間的數據應該作爲一個單一的領域進行處理的錯誤。

架構:之一:串,二:串,三:串,四:串

載文件:

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | "start quote" and | a word after quotes 

第一和第二線的上方進行處理。但不是第三個。


更新:

可以請一些解釋爲什麼做了以下工作除了第三行

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | "start quote" and | a word after quotes 
forth line | enclosed | {"GPRS","MCC_DETECTED":false,"MNC_DETECTED":false} | how does this work? 
fifth line | with | {"start quote"} and | a word after quotes 

這可以有一些奇特的解釋。從最終用戶的角度來看,這是荒謬的。

+1

我只是想你的更新,你給的例子實際上不工作。與大多數CSV解析應用程序一樣,BigQuery默認將雙引號(「)作爲字段包圍字符。第三行沒有正確轉義(請參閱下面的答案),並且攝取會引發錯誤。您的選擇是:1.將您的提取請求中的「configuration.load.quote」參數更改爲除雙引號以外的內容(數據中未顯示的字符)。 2.按照下面的建議轉義您的數據...例如,Python的csv類會自動執行此操作。 –

+0

雖然考慮到能夠將「configuration.load.quote」設置爲NULL這樣的事情可能有好處,但我認爲在處理大量CSV數據時,非常明確地使用分隔符和字段包圍字符很重要。它有助於捕捉底層數據中的錯誤,並確保您所攝入的數據有效。 –

回答

7

來自CSV RFC4180 page「如果使用雙引號將字段括起來,則出現在字段內的雙引號必須通過在另一個雙引號之前進行轉義才能轉義。

你可能想這樣做:

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | " ""start quote"" and " | a word after quotes 

更多關於我們的CSV輸入格式here

+4

請注意,您可以通過將加載作業配置中的「quote」字段設置爲永不使用的內容來更改引用字符。 –

+1

如何在加載作業中設置報價字段?如果我使用bq加載--quote'^'...那麼我得到一個錯誤致命標誌解析錯誤:未知的命令行標誌'quote'#如果我添加引用參數〜/ .bigqueryrc然後我得到錯誤:未知的標誌配置.load.quote在bigqueryrc文件中找到 – shantanuo

+0

我猜「quote」參數會被添加到下一個版本的bq命令行工具中。這個問題對我來說非常重要,我會等待新版本! – shantanuo

1

您也可以在上傳數據時使用其他標誌。我用BQ工具與下列標誌

bq load -F , --source_format CSV --skip_leading_rows 1 --max_bad_records 1 --format csv -E UTF-8 yourdatset gs://datalocation. 
0

--報價完美。

bq load 
--source_format CSV --quote "" 
--field_delimiter \t 
--max_bad_records 10 
-E UTF-8 
destination table 
Source files 
相關問題