2017-04-13 49 views
1

我已經在GROUP BY語句中成功使用了複雜類型(在我的案例中是map)。 但是,當我試圖做使用映射在PARTITION BY語句我得到一個錯誤:在使用窗口函數時,是否在PARTITION BY語句中配置了複雜類型?

SELECT *, MIN(dt) OVER(PARTITION BY some_map) FROM some_table

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: Partition Expression (TOK_TABLE_OR_COL query_params) is not a comparable expression

所以不支持蜂巢複合型的PARTITION BY語句? 如果沒有,如果我需要保留所有其他列值(我不能執行GROUP BY),我該怎麼辦?

我的意思是?例如,我有一個表user_queries

user_id|query_params  |result_position|dt 
1  |{'text':'query1'} |0    |2017-04-01 10:00 
1  |{'text':'query1'} |1    |2017-04-01 12:00 
1  |{'text':'query2'} |0    |2017-04-01 13:00 
2  |{'text':'query1'} |0    |2017-04-01 09:00 

我執行此查詢:

SELECT 
    user_id, 
    query_params, 
    position, 
    MIN(dt) OVER(PARTITION BY user_id, query_params) AS dt 
FROM user_queries 

而且我想這(看在2擋線DT):

user_id|query_params  |result_position|dt 
1  |{'text':'query1'} |0    |2017-04-01 10:00 
1  |{'text':'query1'} |1    |2017-04-01 10:00 
1  |{'text':'query2'} |0    |2017-04-01 13:00 
2  |{'text':'query1'} |0    |2017-04-01 09:00 
+0

無論是否有位置,這似乎不合理 –

+0

@Dudu馬可維茲你能解釋我爲什麼?)例如,我hav有很多領域的地圖。 GROUP BY知道如果所有對應的相等鍵值相等,則兩個映射相等。我不想枚舉所有地圖的值,所以這不合理嗎? –

+0

它與''by *'(僞代碼)類似。你能舉一個具體的例子嗎? –

回答

0
select user_id 
     ,query_params 
     ,result_position 

     ,min(dt) over 
     (
      partition by user_id 
          ,sort_array (map_keys (query_params)) 
          ,sort_array (map_values (query_params)) 
     ) as min_dt 

from user_queries 
相關問題