2016-09-25 50 views
0

嗨我從上游獲取數據爲csv文件並在其上創建Hive表。現在,一些csv文件包含幾行/列的控制M字符。對於例如3列數據被示出在下面的控制字符M如何刪除配置單元表中的^ M行?

abc^M,def,ghi 
jkl,mno^M,pqr 

現在我將數據加載到使用LOAD DATA INPATH '/path/to/file' INTO TABLE mytable由於上述數據配置單元表包含沒控制M蜂巢認爲換行和斷開該行進入新的行,以便在上面配置單元數據表返回4行數而不是2.我嘗試使用regex_replace(mycol,'[\x01-\x1A]',"\\")來替換所有控制字符,包括控制M用\和它的作品,但它留下\符號爲例如abc^M將變成abc\我不想更改數據有沒有更好的方法來做到這一點?我不確定在這種情況下,即使自定義serde也會幫忙。請指導。我是Hive新手。提前致謝。

+0

爲什麼不使用'regex_replace(mycol」 [\ x01- \ X1A]」, '')' – Ambrish

回答

1

您試圖用\替換^M,因此它顯示在您的最終結果中。用空字符串替換它。例如:

regexp_replace(mycol, '[\x01-\x1A]', '') 

另一方面,首先清理文件然後上載到HDFS是一個好主意。

從源文件中替換^M然後上傳會讓事情變得更好。

示例代碼:

$ tr -d '\015' </path/to/file/file1> /tmp/file1 
$ LOAD DATA INPATH '/tmp/file1' INTO TABLE mytable 

還有其他的方法可以從文件中刪除^M