2016-09-25 2 views
0

こんにちは私は上流からcsvファイルとしてデータを取得し、その上にハイブテーブルを作成します。現在、いくつかのcsvファイルには、少数の行/列の制御M文字が含まれています。例えば、 3列のデータは、制御M文字ハイブテーブル行の^ Mを削除するには?

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

で以下に示される上記データが含まれているので今はLOAD DATA INPATH '/path/to/file' INTO TABLE mytableを用いてハイブテーブルにデータをロードコントロールMハイブは改行として考えるので、ハイブのデータ上に新しい行にその行を破りますテーブルは2の代わりに4行の数を返します。私はregex_replace(mycol,'[\x01-\x1A]',"\\")を使用して、コントロールMを含むすべての制御文字を置き換えようとしましたが、動作しますが、\ signの後ろに残しますabc^Mabc\になります。データを変更したくありません。これを行うにはより良い方法がありますか?このケースでは、カスタムserdeが助けになるかどうかはわかりません。ご案内ください。私はハイブには新しいです。前もって感謝します。

+0

は、 [\ x01- \ x1A] '、' ') ' – Ambrish

答えて

1

^M\で置き換えようとしており、最終結果に表示されています。空の文字列で置き換えます。次のようなものがあります。

もう一方で、ファイルをクリーンアップしてHDFSでアップロードすることをお勧めします。

^Mをソースファイルに置き換えてアップロードすると、より良いものになります。

サンプルコード:

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

ファイルから^Mを削除する他の方法があります: `regex_replaceの(mycolを、」使用しないのはなぜ

関連する問題