【发布时间】:2017-09-08 22:24:46
【问题描述】:
我正在使用 hive 和 hadoop。我正在寻找一个函数 (hiveql),它允许对匹配规则的客户列表进行排序。 我想在最后连续 10 天(colldate)进行条件测试。预期的结果是在过去 10 天内仅计算此条件的客户 (ressourcename) 的列表:success>=3。每个客户每天都记录一个条目(成功次数)。 我使用以下查询,但构建了许多 map reduce,这需要很多时间。 我正在寻找一种优化方法:
select J1.colldate,J1.ResourceName
from
TABLE J1,
TABLE J2,
TABLE J3,
TABLE J4,
TABLE J5,
TABLE J6,
TABLE J7,
TABLE J8,
TABLE J9,
TABLE J10
WHERE
J1.ResourceName=J2.ResourceName
and J1.ResourceName=J3.ResourceName
and J1.ResourceName=J4.ResourceName
and J1.ResourceName=J5.ResourceName
and J1.ResourceName=J6.ResourceName
and J1.ResourceName=J7.ResourceName
and J1.ResourceName=J8.ResourceName
and J1.ResourceName=J9.ResourceName
and J1.ResourceName=J10.ResourceName
and J1.success>=3
and J2.success>=3
and J3.success>=3
and J4.success>=3
and J5.success>=3
and J6.success>=3
and J7.success>=3
and J8.success>=3
and J9.success>=3
and J10.success>=3
and J1.colldate=from_unixtime(unix_timestamp()-1*60*60*24, 'dd/MM/yyyy')
and J2.colldate=from_unixtime(unix_timestamp()-2*60*60*24, 'dd/MM/yyyy')
and J3.colldate=from_unixtime(unix_timestamp()-3*60*60*24, 'dd/MM/yyyy')
and J4.colldate=from_unixtime(unix_timestamp()-4*60*60*24, 'dd/MM/yyyy')
and J5.colldate=from_unixtime(unix_timestamp()-5*60*60*24, 'dd/MM/yyyy')
and J6.colldate=from_unixtime(unix_timestamp()-6*60*60*24, 'dd/MM/yyyy')
and J7.colldate=from_unixtime(unix_timestamp()-7*60*60*24, 'dd/MM/yyyy')
and J8.colldate=from_unixtime(unix_timestamp()-8*60*60*24, 'dd/MM/yyyy')
and J9.colldate=from_unixtime(unix_timestamp()-9*60*60*24, 'dd/MM/yyyy')
and J10.colldate=from_unixtime(unix_timestamp()-10*60*60*24, 'dd/MM/yyyy');
表的结构是: enter image description here
【问题讨论】:
-
添加一个包含源行集和请求行集的数据样本。
标签: aggregate-functions hiveql