2017-05-23 95 views
0

我試圖實現動態分區在最近的30個分區更新日期:蜂巢:動態分區

set hive.exec.dynamic.partition=true; 
insert overwrite tmp_ol.user_status_aggre partition(`day`) 
select 
uuid, 
uv+(case when b.uuid is not null then 1 else 0 end) as uv, 
`date` as `day` 
from 
(select uuid,uv,`date` from user_status_aggre where `day` between `2017-05-15` and `2017-05-22`) a 
left join 
(select uuid from tabledemo where `day`='2017-05-22') b 
on a.uuid=b.uuid 

但我發現了一個錯誤:

FAILED: ParseException line 1:17 cannot recognize input near 'tmp_ol' '.' 'user_status_aggre' in destination specification 

創建查詢表如下:

create table tmp_ol.user_status_aggre (
uuid string, 
uv string, 
`date` date) 
PARTITIONED BY (`day` string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' 
STORED AS textfile; 

我想知道是否動態分區不能應用於自己..感謝y我們的幫助。

+0

您似乎忘記在INSERT語句中TABLE關鍵字。它是INSERT OVERWRITE TABLE PARTITION ... –

回答

0

試試下面一個:

SET hive.exec.dynamic.partition=true; 
INSERT 
    overwrite TABLE tmp_ol.user_status_aggre partition 
    (
     day 
    ) 
SELECT 
    uuid, 
    uv+(
     CASE 
      WHEN b.uuid IS NOT NULL 
      THEN 1 
      ELSE 0 
     END) AS uv, 
    date AS day 
FROM 
    (
     SELECT 
      uuid, 
      uv, 
      date 
     FROM 
      user_status_aggre 
     WHERE 
      day BETWEEN '2017-05-15' AND '2017-05-22') a 
LEFT JOIN 
    (
     SELECT 
      uuid 
     FROM 
      tabledemo 
     WHERE 
      day='2017-05-22') b 
ON 
    a.uuid=b.uuid