2016-05-27 7 views
4

選択クエリを実行中に既存のテーブルの行番号を生成するにはどうすればよいですか?たとえば
ハイブの行番号機能

select row_number(), * from emp; 

私はハイブ0.13を使用しています。私の環境では、外部のjarファイルやudfsにアクセスできません。 基礎となるファイルは寄せ木版の形式です。

ありがとうございます!

+2

大量のデータセット(つまり5,000万行以上)に対してこの種の分析関数を実行しようとすると、データの一貫性をテストするように注意してください。 ** V0.13とV0.14の**決定論的な方法**で微妙な**データの破損**が発生しています。行番号は順番に並んでいますが、数千行が削除され、他の行。しかしそれはHive-on-TEZ特有のものかもしれません。 –

答えて

12

ROW_NUMBER()windowing functionなので、OVERと併せて使用する必要があります。 PARTITIONを指定しないでください。

SELECT *, ROW_NUMBER() OVER() AS row_num 
FROM emp 
--- other stuff 
+0

は少なくとも私のバージョンのhiveqlでは明示的な順序付けが必要なようです。 'SELECT *、ROW_NUMBER()OVER(ORDER BY some_emp_field)AS row_num FROM emp' – patricksurry

1

ROW_NUMBER()は、たとえばのためにあなたのサイト上でのユーザーの最近の訪問をを見つけるために使用することができます。

SELECT user_id,user_name,timestamp 
FROM (
SELECT user_id,user_name,timestamp,row_number() over (partition by userid order by timestamp desc) as visit_number 
from user) user_table 
    WHERE visit_number = 1 
+0

これはOPの質問にどのように関連していますか? – gobrewers14

+0

@ GoBrewers14 - 私は答えにもう一つのレイヤーを追加し、row_numberを生成してそれを理解しています。これが役に立ったら嬉しいです:) – syadav

+1

コメントを追加することを検討してください。 – syadav

3

これを試してみてください:

select row_number() OVER(), * from emp; 

は、我々はrow_numberとともにOVER()を使用することになっています。

+0

これは私の答えとどのように違うのですか? – gobrewers14

関連する問題