2016-11-26 5 views
0

TeradataでクエリをHIVE QL(HDF)に変換しようとしていて、例を見つけるのに苦労しています。 Teradata(私の機能的な最終目標) - テーブルのレコード数を求めてから、それぞれのgrowth_type_id値と最終的に各グループ%を求めます。HIVE質問合計より

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に固有のものですQUALIFY。
  • クエリ内のどこでも使用されるエイリアスは、Teradata固有のものです。列位置によって
  • グルーピングは、パラメータに依存する - 別名によってhive.groupby.orderby.position.alias
  • グループがサポートされていない - ハイブ(例えば7/4 - テラのように1.75としない1)整数演算を使用しないhttps://issues.apache.org/jira/browse/HIVE-1683
  • を数字(複数可)を先行することなく小数点表記が有効でない

Psと
GROUP BYの前にQUALIFYを使用していますが、Teradata構文がアジャイルであり、唯一の条件はSELECT/WITH句が最初に配置されることです。標準句の順序を維持することを強くお勧めします。
WITH - SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY

+0

今すぐご確認ください –