简体   繁体   English

Hive 子查询不支持

[英]Hive Sub query not supporting

we are migrating greenplum to hive and below code creating issues for sub query not supported by hive. please help me.我们正在将 greenplum 迁移到 hive,下面的代码为 hive 不支持的子查询创建问题。请帮助我。

converted hive:转换为 hive:

select concat_ws(';', max(concat_str)) 
FROM (
SELECT collect_list(Display_String) over (order by data_day ) concat_str 
FROM 
(select data_day, sum(revenue)/1000000.00 as revenue,data_day||' '||trim(regexp_replace(sum(revenue), '(?!^)(\\d\\d\\d(?=(\\d\\d\\d)*\\b))', ',$1')) as Display_String 
from(select case when data_date = current_date  then 'D:' when data_date = date_sub(current_date,1) then ' D-01:'
when data_date = date_sub(current_date,2) then ' D-02:'
when data_date = date_sub(current_date,7) then ' D-07:'
when data_date = date_sub(current_date,28) then ' D-28:'
 end data_day, revenue/1000000.00 revenue
from test.tablename
where data_date between date_sub(current_date,28) and current_date and 
hour <=(Select hour from ( select row_number() over(order by hour desc) iRowsID, 
hour from test.tablename where data_date = current_date and  type = 'UVC')tbl1
where irowsid = 2) and type in( 'UVC')
order by 1 desc) a
group by 1) aa ) concat_qry

old Greenplum code旧的Greenplum代码

select string_agg(Display_String, ';' order by data_day )
from
(
select data_day, 
sum(revenue)/1000000.00 as revenue,
data_day||' '||trim(to_char(sum(revenue),'9,999,999,999')) as Display_String 
from(
select case when data_date = current_date  then 'D:'
when data_date = current_date - 1 then ' D-01:'
when data_date = current_date - 2 then ' D-02:'
when data_date = current_date - 7 then ' D-07:'
when data_date = current_date - 28 then ' D-28:'
 end data_day, revenue/1000000.00 revenue
from test.tablename
where data_date between current_date - 28 and current_date and 
hour <=(Select hour from ( select row_number() over(order by hour desc) iRowsID, 
hour from test.tablename where data_date = current_date and  type = 'UVC')tbl1
where irowsid = 2) and type in( 'UVC')
order by 1 desc) a
group by 1)aa;

could you pls try this?你能试试这个吗?

I did a left join instead of subquery.我做了一个左连接而不是子查询。 I couldn't check because i dont have necessary tables.我无法检查,因为我没有必要的表格。 pls let me know if you see any issues.如果您发现任何问题,请告诉我。

select concat_ws(';', max(concat_str)) 
FROM (
SELECT collect_list(Display_String) over (order by data_day ) concat_str 
FROM 
(select data_day, sum(revenue)/1000000.00 as revenue,data_day||' '||trim(regexp_replace(sum(revenue), '(?!^)(\\d\\d\\d(?=(\\d\\d\\d)*\\b))', ',$1')) as Display_String 
from(select case when data_date = current_date  then 'D:' when data_date = date_sub(current_date,1) then ' D-01:'
when data_date = date_sub(current_date,2) then ' D-02:'
when data_date = date_sub(current_date,7) then ' D-07:'
when data_date = date_sub(current_date,28) then ' D-28:'
 end data_day, revenue/1000000.00 revenue
from test.tablename
left join (Select hour hour_subq  from ( select row_number() over(order by hour desc) iRowsID, 
hour from test.tablename where data_date = current_date and  type = 'UVC')tbl1
where irowsid = 2)  rs ON hour <= rs.hour_subq  
where data_date between date_sub(current_date,28) and current_date 
and type in( 'UVC')
 ) a
group by 1) aa ) concat_qry

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM