2016-11-26 5 views
0

Teradata에서 쿼리를 HIVE QL (HDF)로 변환하려고 시도 중이고 예제를 찾기 위해 고심하고 있습니다. Teradata (필자의 최종 목표) - 테이블의 레코드 개수를 원하고 각각의 growth_type_id 값과 궁극적으로 각 그룹의 %를 계산합니다.HIVE Sum 이상 쿼리

select trim(growth_type_id)  AS VAL, COUNT(1) AS cnt, SUM(cnt) over() as GRP_CNT,CNT/(GRP_CNT* 1.0000) AS perc 
from acdw_apex_account_strategy 
qualify perc > .01 group by val 

주 : HDP-2.4.3.0-227

+0

완전한 원본 쿼리를 표시하고 변환하기 어려운 부분을 구체적으로 나타내시겠습니까? –

+0

Dudu, 전체 원본입니다. 저는 (growth_type_id)와 총계에서 고유 값 당 레코드 수를 효율적으로 얻을 수 있는지 확인하기 위해 고심하고 있습니다 .... 효율적입니다. – user7214103

답변

0
select  val 
      ,cnt 
      ,grp_cnt 
      ,cnt/(grp_cnt* 1.0000) as perc 

from  (select  trim(growth_type_id) as val 
         ,count(*)    as cnt 
         ,sum(count(*)) over() as grp_cnt 

      from  acdw_apex_account_strategy 

      group by trim(growth_type_id) 
      ) t 

where  cnt/grp_cnt > 0.01 
; 

  • 자격 실행은 테라 데이타 고유합니다.
  • 쿼리에서 모든 곳에서 사용되는 별칭은 Teradata에서만 고유합니다. 지원되지 별명 의해 hive.groupby.orderby.position.alias
  • 그룹화 - - 열 위치하여
  • 그룹화 종속 파라미터 https://issues.apache.org/jira/browse/HIVE-1683
  • 하이브 정수 연산 사용하지
  • (예 : 7/4 - 테라 같이 1.75 아닌 1)
  • 을 숫자를 선행없이 진수 표기법이 유효하지


GROUP BY보다 먼저 QUALIFY를 사용하고 있으며 Teradata 구문이 민첩하고 SELECT/WITH 절이 먼저 있어야한다는 요구 사항 만 있으므로 표준 절 순서를 유지하는 것이 좋습니다.
WITH - SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY

+0

지금 확인하십시오. –