84

Hive クエリの結果を CSV ファイルに出力したいと考えています。コマンドは次のようになるはずだと思いました:

insert overwrite directory '/home/output.csv' select books from table;

実行すると、正常に完了したと表示されますが、ファイルが見つかりません。このファイルを見つけるにはどうすればよいですか、または別の方法でデータを抽出する必要がありますか?

4

18 に答える 18

4

次の例のように、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 つ以上のファイルが に書き込まれます。

于 2014-06-29T07:38:09.027 に答える
3

同様の解決策を探していましたが、ここに記載されているものは機能しません。私のデータには、空白 (スペース、改行、タブ) 文字とコンマのすべてのバリエーションがありました。

列データ 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 が作成されました。これが、このソリューションを探しに来る人に役立つことを願っています.

于 2015-08-27T00:49:34.253 に答える
3

ハイブ文字列関数を使用できますCONCAT_WS( string delimiter, string str1, string str2...strn )

例:

hive -e 'select CONCAT_WS(',',cola,colb,colc...,coln) from Mytable' > /home/user/Mycsv.csv
于 2015-04-08T21:03:31.443 に答える
3

HUE を使用している場合、これもかなり単純です。HUE の Hive エディターに移動して、Hive クエリを実行し、結果ファイルを XLS または CSV としてローカルに保存するか、結果ファイルを HDFS に保存するだけです。

于 2014-07-29T18:00:38.260 に答える
1

デフォルトのセパレータは " ^A" です。Python 言語では " \x01" です。

区切り文字を変更したいときは、次のような SQL を使用します。

SELECT col1, delimiter, col2, delimiter, col3, ..., FROM table

次に、delimiter+" ^A" を新しい区切り文字と見なします。

于 2013-11-06T22:27:17.843 に答える
1

さまざまなオプションを試しましたが、これは の最も簡単な解決策の 1 つですPython Pandas

hive -e 'select books from table' | grep "|" ' > temp.csv

df=pd.read_csv("temp.csv",sep='|')

tr "|" ","「|」を変換するために使用することもできます に "、"

于 2018-12-11T21:34:03.323 に答える
0

クエリを開始した後、次の手順をさらにカバーするだけです。 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
于 2019-03-25T20:22:43.957 に答える