この Hive クエリを使用して、テーブルを CSV ファイルにエクスポートしました。
INSERT OVERWRITE DIRECTORY '/user/data/output/test' select column1, column2 from table1;
生成されたファイル '000000_0' にはコンマ区切りがありません
これは CSV ファイルを生成する正しい方法ですか? いいえの場合、CSV ファイルを生成する方法を教えてください。
それはあなたのために働くはずです
タブ区切り
hive -e 'select * from some_table' > /home/yourfile.tsv
カンマ区切り
hive -e 'select * from some_table' | sed 's/[\t]/,/g' > /home/yourfile.csv
レポートを生成した後(行ったように)、クエリ出力の区切り文字を使用することはできません。
区切り文字をカンマに変更できます。
デフォルトの区切り文字\001
(見えない文字) が付属しています。
hadoop fs -cat /user/data/output/test/* |tr "\01" "," >>outputwithcomma.csv
他の回答で示されているように、デフォルトの区切り文字を変更する方法があります。
いくつかの bash スクリプトを使用して生の出力を csv に変換する方法もあります。ただし、\001 だけでなく、考慮すべき区切り文字が 3 つあります。ハイブ テーブルにマップがある場合、状況はもう少し複雑になります。
ハイブから3つのデフォルト区切り文字(\ 001 \ 002および\ 003)すべてを処理してcsvを出力できるbashスクリプトを作成しました。スクリプトとその他の情報は次のとおりです。
CSV への Hive デフォルト区切り文字
Hive のデフォルトの区切り文字は
Row Delimiter => Control-A ('\001') Collection Item Delimiter => Control-B ('\002') Map Key Delimiter => Control-C ('\003')
テーブルをエクスポートするときにこれらの区切り記号を変更する方法はありますが、これを csv に変換する必要があり、行き詰まる場合があります。
これは、複数のファイルに分割され、デフォルトの区切り文字を持つ DB エクスポートを処理できる簡単な bash スクリプトです。単一の CSV ファイルを出力します。
すべてのセグメントの命名規則は 000*_0 であると想定されています。
INDIRECTORY="path/to/input/directory" for f in $INDIRECTORY/000*_0; do echo "Processing $f file.."; cat -v $f | LC_ALL=C sed -e "s/^/\"/g" | LC_ALL=C sed -e "s/\^A/\",\"/g" | LC_ALL=C sed -e "s/\^C\^B/\"\":\"\"\"\",\"\"/g" | LC_ALL=C sed -e "s/\^B/\"\",\"\"/g" | LC_ALL=C sed -e "s/\^C/\"\":\"\"/g" | LC_ALL=C sed -e "s/$/\"/g" > $f-temp done echo "you,can,echo,your,header,here,if,you,like" > $INDIRECTORY/final_output.csv cat $INDIRECTORY/*-temp >> $INDIRECTORY/final_output.csv rm $INDIRECTORY/*-temp
要旨の詳細説明
試す
hive --outputformat==csv2 -e "select * from YOUR_TABLE";
これは私のために働いた
私のハイブバージョンは「Hive 3.1.0.3.1.0.0-78」です
私は同様の問題を抱えていましたが、これが私がそれに対処する方法でした。
ステップ 1 - 次のように、ハイブ テーブルから別のテーブルにデータをロードしました。
DROP TABLE IF EXISTS TestHiveTableCSV; CREATE TABLE TestHiveTableCSV ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' AS SELECT Column List FROM TestHiveTable;
手順 2 - 適切な拡張子を使用して、ハイブ ウェアハウスから新しい場所に BLOB をコピーしました
Start-AzureStorageBlobCopy
-DestContext $destContext
-SrcContainer "ソース コンテナー"-SrcBlob "hive/warehouse/TestHiveTableCSV/000000_0"
-DestContainer "宛先コンテナー" ` -DestBlob "CSV/TestHiveTable.csv"
お役に立てれば!
よろしく、 Dattatrey Sindol (Datta) http://dattatreysindol.com