66

この Hive クエリを使用して、テーブルを CSV ファイルにエクスポートしました。

INSERT OVERWRITE DIRECTORY '/user/data/output/test' select column1, column2 from table1;

生成されたファイル '000000_0' にはコンマ区切りがありません

これは CSV ファイルを生成する正しい方法ですか? いいえの場合、CSV ファイルを生成する方法を教えてください。

4

17 に答える 17

43

それはあなたのために働くはずです

  • タブ区切り

    hive -e 'select * from some_table' > /home/yourfile.tsv
  • カンマ区切り

    hive -e 'select * from some_table' | sed 's/[\t]/,/g' > /home/yourfile.csv
于 2014-05-02T10:24:06.537 に答える
23

レポートを生成した後(行ったように)、クエリ出力の区切り文字を使用することはできません。

区切り文字をカンマに変更できます。

デフォルトの区切り文字\001(見えない文字) が付属しています。

hadoop fs -cat /user/data/output/test/* |tr "\01" "," >>outputwithcomma.csv

これもチェック

于 2013-06-13T12:44:49.790 に答える
1

他の回答で示されているように、デフォルトの区切り文字を変更する方法があります。

いくつかの 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

要旨の詳細説明

于 2016-03-18T13:11:52.683 に答える
1

試す

hive --outputformat==csv2 -e "select * from YOUR_TABLE";

これは私のために働いた

私のハイブバージョンは「Hive 3.1.0.3.1.0.0-78」です

于 2019-11-29T05:58:37.127 に答える
1

私は同様の問題を抱えていましたが、これが私がそれに対処する方法でした。

ステップ 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

于 2014-05-29T14:19:10.970 に答える