Я пытаюсь изменить это решение (первый ответ) , который считает нулевые значения на основе групп, единственное отличие состоит в том, что я хочу процент от них (например, 30% столбца1 для года 2016 является нулевым), не считается (например, 6521-й столбец1 для 2016 года является нулевым). Мой запрос:
WITH t1nulltest AS
( select date_column
,SUM(IF(c1 IS NULL,1,0))/count(*) OVER (PARTITION BY date_column) as c1null
,SUM(IF(c2 IS NULL,1,0))/count(*) OVER (PARTITION BY date_column) as c2null
,SUM(IF(c3 IS NULL,1,0))/count(*) OVER (PARTITION BY date_column) as c3null
,SUM(IF(c4 IS NULL,1,0))/count(*) OVER (PARTITION BY date_column) as c4null
,SUM(IF(c5 IS NULL,1,0))/count(*) OVER (PARTITION BY date_column) as c5null
,row_number() OVER (PARTITION BY date_column) as rowno
from t1)
select
date_column, c1null, c2null,c3null,c4null,c5null from t1nulltest
where rowno =1;
Единственное отличие от оригинального решения состоит в том, что я добавляю /count(*)
, но это не работает, и мне интересно, почему. Оригинальный запрос работает. Мой запрос выдает ошибку:
Error while compiling statement: FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns. Also check for circular dependencies. Underlying error: org.apache.hadoop.hive.ql.parse.SemanticException: line 2:68 Expression not in GROUP BY key 'date_column'