2016-11-26 3 views
0

Я пытаюсь преобразовать запрос в Teradata в HIVE QL (HDF) и изо всех сил пытался найти примеры. Teradata (моя функциональная конечная цель) - требуется подсчет записей в таблице, затем для каждого значения growth_type_id и в конечном итоге% каждой группы.HIVE Sum Over query

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 
; 

  • QUALIFY является уникальным для Teradata.
  • Псевдонимы, используемые везде в запросе, уникальны для Teradata.
  • Группировка по позициям столбцов параметр зависит - hive.groupby.orderby.position.alias
  • Группировка по псевдонимами не поддерживается - https://issues.apache.org/jira/browse/HIVE-1683
  • улей не использует целочисленную арифметику (например, 7/4 - 1,75, а не 1, как и в Teradata)
  • числовой формат без предшествующей цифры (ы) не является действительным

Пс
Вы используете QUALIFY перед GROUP BY, и хотя синтаксис Teradata является гибким, и единственным требованием является то, что предложение SELECT/WITH будет позиционировано первым, я настоятельно рекомендую придерживаться стандартного порядка предложений:
WITH - SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY

+0

Пожалуйста, проверьте сейчас –