通过在Hive中分组来写出表格

时间:2014-09-29 20:58:57

标签: hive apache-pig grouping overwrite

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_AUBREY_FORD.csv,SMITH_AUDREY_TOYOTA.csv等写出到本地目录。这可能在Hive中吗?如果不是,猪怎么样?

编辑:

我发现虽然这在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

1 个答案:

答案 0 :(得分:1)

没有直接的方法可以根据group by输出到本地目录。我建议采用以下方法

  1. 将带有必需group by子句的Select查询写入文件名query1.hql
  2. hive -f query1.hql> /SMITH_AUBREY_FORD.csv
  3. 将另一个select查询写入另一个文件query2.hq​​l
  4. hive -f query2.hq​​l> /SMITH_AUDREY_TOYOTA.csv
  5. 等等。

    因此,您将获得存储在本地目录中的所需结果。

    希望这种方法有所帮助。