2013-10-17 35 views
2

我試圖通過文件插入到Hive表中。但恰巧,文本文件中的最後一列的數據溢出了不同的行。在Hive中插入多行代碼

示例數據:

col1|col2|col3|this line is spilling into different line 
       as is this, this is spilling this is spilling this is sp 
       iliing and so is this 
col1|col2|col3|this can be inserted without problem 

所以溢出的數據被視爲一個新行到包裝到最後一列。我嘗試使用由選項終止的行,但不能得到這個工作。

+1

這是很難找出哪個換行是字段的一部分,哪些是記錄/元組分隔符。簡單的方法是逃避領域的一部分。另一種方法是在包含分隔符(字段或記錄分隔符)的字段周圍使用字符串標識符(例如引號)。如果你不能這樣做,我想你必須編寫一個serde或者一個存儲函數,如果數據不包含分隔符,那麼就會發現數據屬於之前的記錄 – SNeumann

+0

@ SNeumann,我想你是對的,我觀察到這個behaiour發生在某些值上,並從中刪除換行符。我能夠這樣做,謝謝。但是我將在列中存儲少量的日誌值,並且在某些時候它可能確實是必需的。 –

回答

0

這是在列中嵌入換行符(行結束/記錄)符號的更普遍問題的特例。典型的csv文件格式在字符串字段周圍具有引號字符,因此檢測字段中嵌入的換行符可以通過注意換行符被簡化來簡化。 您沒有引號字符,但您確實知道字段數量,因此您可以檢測換行符何時會導致記錄提前結束。但是在最後一個字段中檢測換行是很困難的。您需要注意,後續行中沒有字段分隔符,並且假定以下這些行是記錄的一部分。