在hive中通过分组写出表

rhfm7lfc  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(411)

hive是否能够根据查询中的分组语句将查询写入不同的文件(例如,不同的.csv文件)?
例如玩具数据集 extract :

LName   FName   Car_make   Year
 -----   -----   --------   ----
 Smith   Audrey  Ford       2000
 Smith   Audrey  Ford       2013
 Smith   Audrey  Toyota     1996
 Miller  Heath   Ford       1995
 Miller  Heath   Dodge      1990
 Miller  Heath   Dodge      2010

希望使用分组方式写出数据集:

INSERT OVERWRITE LOCAL DIRECTORY '/user/drwho/foodf' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
SELECT
  LNAME,
  FNAME,
  CAR_MAKE,
  AVG(YEAR) AS AVERG
FROM EXTRACT
GROUP BY LNAME, FNAME, CAR_MAKE

并将输出集smith\u aubrey\u ford.csv、smith\u audrey\u toyota.csv等写入本地目录。这在 hive 里可能吗?如果没有,那Pig呢?
编辑:
我发现,虽然这在hive中是不可能的,但我们可以使用@k s nidhin的建议将查询写到本地目录,而不是使用awk:

$ cat extract.txt 
 Smith,Audrey,Ford,2000
 Smith,Audrey,Ford,2013
 Smith,Audrey,Toyota,1996
 Miller,Heath,Ford,1995
 Miller,Heath,Dodge,1990
 Miller,Heath,Dodge,2010

 $ awk -F "," '{ print > $1"_"$2"_$3".txt" }' extract.txt
 $ ls -1
 extract.txt
 Miller_Heath_Dodge.txt
 Miller_Heath_Ford.txt
 Smith_Audrey_Ford.txt
 Smith_Audrey_Toyota.txt
ygya80vv

ygya80vv1#

没有基于groupby直接输出到本地目录的方法。我建议采用以下方法
将select查询with required group by子句写入文件名query1.hql
配置单元-f query1.hql>/smith\u aubrey\u ford.csv
将另一个select查询写入另一个文件query2.hql
配置单元-f query2.hql>/smith\u audrey\u toyota.csv
等等。
因此,您将获得存储在本地目录中的所需结果。
希望这个方法有用。

相关问题