2016-09-28 8 views
0

次のハイブクエリを考えてみましょう。Hiveでグループ化しない関数をminveする方法

SELECT 
    id, 
    name, 
    min(from_unixtime(unix_timestamp(), 'yyyy_MM_dd_HH_mm_ss')) as SYSDATE 
    FROM tablename 

私はmin機能を使用する理由は、私は私のすべてのレコードで同じSYSDATEを望んでいたということです。ここにminを追加しないと、複数のSYSDATEが表示されることがあります。

私は、クエリを実行しているエラーを得た:

An exception was caught. 
Error while compiling statement: FAILED: SemanticException [Error 10025]: Line 3:4 Expression not in GROUP BY key 'name' 

だから私は、私のクエリでGROUP BYを追加し、それが働きました。

SELECT 
    id, 
    name, 
    min(from_unixtime(unix_timestamp(), 'yyyy_MM_dd_HH_mm_ss')) as SYSDATE 
    FROM tablename 
    GROUP BY id, name 

しかし、20個以上の列がある場合はどうなりますか?それらをすべてGROUP BYに追加するのは不便ではありませんか?そして、なぜここにGROUP BYを追加する必要がありますか?私はちょうど一貫性のあるSYSDATEを全てのレコードに渡りたいと思っています。それを動作させる他の方法はありますか?

答えて

0

パフォーマンスについての懸念を持っていない場合は、minを計算するために窓関数を使用しよう:

SELECT 
    id , 
    name , 
    min(from_unixtime(unix_timestamp(), 'yyyy_MM_dd_HH_mm_ss')) over(partition by 1) as SYSDATE 
FROM tablename 
関連する問題