Hive クエリの結果を CSV ファイルに出力したいと考えています。コマンドは次のようになるはずだと思いました:
insert overwrite directory '/home/output.csv' select books from table;
実行すると、正常に完了したと表示されますが、ファイルが見つかりません。このファイルを見つけるにはどうすればよいですか、または別の方法でデータを抽出する必要がありますか?
次の例のように、INSERT
… …を使用できます。DIRECTORY
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ca_employees'
SELECT name, salary, address
FROM employees
WHERE se.state = 'CA';
OVERWRITE
以前とLOCAL
同じ解釈を持ち、パスは通常のルールに従って解釈されます。/tmp/ca_employees
呼び出されたレデューサーの数に応じて、1 つ以上のファイルが に書き込まれます。
同様の解決策を探していましたが、ここに記載されているものは機能しません。私のデータには、空白 (スペース、改行、タブ) 文字とコンマのすべてのバリエーションがありました。
列データ tsv を安全にするために、以下に示すように、列データ内のすべての \t 文字をスペースに置き換え、コマンドラインで Python コードを実行して csv ファイルを生成しました。
hive -e 'tab_replaced_hql_query' | python -c 'exec("import sys;import csv;reader = csv.reader(sys.stdin, dialect=csv.excel_tab);writer = csv.writer(sys.stdout, dialect=csv.excel)\nfor row in reader: writer.writerow(row)")'
これにより、完全に有効な csv が作成されました。これが、このソリューションを探しに来る人に役立つことを願っています.
ハイブ文字列関数を使用できますCONCAT_WS( string delimiter, string str1, string str2...strn )
例:
hive -e 'select CONCAT_WS(',',cola,colb,colc...,coln) from Mytable' > /home/user/Mycsv.csv
HUE を使用している場合、これもかなり単純です。HUE の Hive エディターに移動して、Hive クエリを実行し、結果ファイルを XLS または CSV としてローカルに保存するか、結果ファイルを HDFS に保存するだけです。
デフォルトのセパレータは " ^A
" です。Python 言語では " \x01
" です。
区切り文字を変更したいときは、次のような SQL を使用します。
SELECT col1, delimiter, col2, delimiter, col3, ..., FROM table
次に、delimiter+" ^A
" を新しい区切り文字と見なします。
さまざまなオプションを試しましたが、これは の最も簡単な解決策の 1 つですPython
Pandas
。
hive -e 'select books from table' | grep "|" ' > temp.csv
df=pd.read_csv("temp.csv",sep='|')
tr "|" ","
「|」を変換するために使用することもできます に "、"
クエリを開始した後、次の手順をさらにカバーするだけです。
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select books from table;
私の場合、一時フォルダーの下に生成されたデータはdeflate
フォーマットされており、次のようになります。
$ ls
000000_0.deflate
000001_0.deflate
000002_0.deflate
000003_0.deflate
000004_0.deflate
000005_0.deflate
000006_0.deflate
000007_0.deflate
deflate ファイルを解凍し、すべてを 1 つの csv ファイルに入れるコマンドは次のとおりです。
hadoop fs -text "file:///home/lvermeer/temp/*" > /home/lvermeer/result.csv