2016-08-17 3 views
0

コマンドラインを使用してローカルのcsvファイルに書き込んでいるハイブテーブルがあります。 ハイブからCSV - 特殊文字の扱い

hive -e 'select * from my_Table' | sed 's/[\t]/,/g' > /home/myfile.csv 

しかし、出力CSVファイルの

は、特殊文字を含むレコードが何とか新しい行に分割されている場合ではありません:私は、次のコードを使用しています。

Rohan,Kurunäs à 
korson,[email protected],+1 11 111 18 00,VÃâSTERÃâ¦S,Sweden,SvalgÃ¥ngen 

助けてください!

+1

**コードページ変換**の問題のようです。 HadoopはUTF-8で動作しますが、CSVを表示しているマシンではUTF-8を使用していません。 'file myfile.csv'を実行して診断を取得し、UTF-8文字をシステムがサポートしているもの(Windows-1252など)に変換する' iconv 'を試してください。 –

+0

そして本当に改行を引き起こす特別な文字がある場合は、深刻なテキストエディタ(例えばNotepad ++)と16進ダンプ機能を使ってファイルを見て、悪意のある文字を識別します。 Linuxのハードコアユーザーは、16進ダンプのために 'od -cx'を使用することに注意してください。ただし、あなたはそこにいません。 –

答えて

0

CTASを使用してCSVファイルを作成し、CopyToLocalコマンドを使用してファイルを目的の場所にコピーすることをお勧めします。

set mapreduce.job.reduces=1; 
create table mytmptable ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' location 'hdfs://mylocation' as select * from my_Table; 
drop table mytmptable; 

レデューサーの数を1に設定すると1つのファイルが作成されます。