2014-02-10 60 views
1

目前,我有tshark記錄所有符合特定消息傳遞標準的數據包,並將它們輸出爲CSV。然後將CSV存儲在Google CloudStorage中,準備導入到BigQuery中。BigQuery無法從tshark導入CSV

這是tshark輸出的CSV的一個示例行。

"1380106851.793056000", 
"1.1.1.1", 
"2.2.2.2", 
"99999", 
"1111", 
"raw:ip", 
"324", 
"af:00:21:9a", 
"880", 
"102", 
"74:00", 
"ORIG", 
"It's text or !\x0a\" 's not D", 
"0x00", 
"0", 

的BigQuery不會導入該行聲稱,「數據接近雙引號之間(」)和字段分隔符:字段開頭:「我想這是第13列(」這是文本或\ X0A \ 「不是D」)導致這個問題,但我不確定如何否定它。此列包含消息文本,並且假定它可能永遠不會包含均衡的語法是合理的。

我能想到的唯一補救辦法是在文件上運行awk,並用單引號替換任何非語法雙引號。

有什麼我錯過了?

+0

你可以改變你的BigQuery配置的'configuration.load.fieldDelimiter'和'configuration.load.quote'屬性嗎?如果是這樣,我會嘗試使用像'\ 001'這樣的字符(或者其他一些「永遠不會顯示」的字符)來限定CSV創建和數據加載。同樣,數據的雙引號需要在兩端關閉。 – n0741337

+0

到目前爲止,我只在GUI中嘗試過創造作業 - 但我會做一個自定義作業來測試。消息數據由用戶生成,因此它幾乎肯定會包含很多隨機字符。我只是需要避免它逃避報價。 – user3294345

+0

試圖重現這一點:我在示例中看到多行,而不是多列。什麼是原始格式? –

回答

2

我不知道爲什麼tshark的逃脫用反斜槓雙引號,但根據RFC 4180,他們應該用雙引號被引用:

「中的一個領域(雙)引號字符必須是由兩個 (雙)引號字符表示。「

的BigQuery會很樂意攝取報價以這種方式逃脫:

  • 不工作:「這是文字或\ X0A \」「不是d‘
  • 作品:’這是文或!\ X0A「」「不是d」

有沒有辦法告訴tshark的是如何適當地逃脫CSV?否則,我敢打賭,這將是一個歡迎的補丁,如果引用RFC標準。此外,如果需要的話這個備用轉義機制可以實現爲BigQuery功能(I猜這個問題的投票可以用來衡量它需要多少)。

+0

感謝您的回覆,這是完全合理的,但我不確定是否是tshark逃避報價。內容可能是原始數據包中的內容,我會檢查這個數據並將其與原始PCAP進行交叉引用。如果它是原始數據包內容,我想我可能需要用sed迭代它才能在導入之前調整內容。 – user3294345

+0

查看原始PCAPs,雙引號(「)肯定存在,但不會按照RFC 4180轉義。實際上,它不會被轉義。斜槓也是包中原始文本的一部分。 BigQuery遵守RFC,它可能必須是tshark的補丁?很多CSV解析器都不能處理格式錯誤的格式,所以一旦編寫它就很難修復。 – user3294345

+0

是的,tshark需要以某種方式處理轉義,以便我們可以獲得有效的CSV,這很奇怪,這還沒有處理。你嘗試http://ask.wireshark.org/? –