選択クエリを実行中に既存のテーブルの行番号を生成するにはどうすればよいですか?たとえば
:ハイブの行番号機能
select row_number(), * from emp;
私はハイブ0.13を使用しています。私の環境では、外部のjarファイルやudfsにアクセスできません。 基礎となるファイルは寄せ木版の形式です。
ありがとうございます!
選択クエリを実行中に既存のテーブルの行番号を生成するにはどうすればよいですか?たとえば
:ハイブの行番号機能
select row_number(), * from emp;
私はハイブ0.13を使用しています。私の環境では、外部のjarファイルやudfsにアクセスできません。 基礎となるファイルは寄せ木版の形式です。
ありがとうございます!
ROW_NUMBER()
はwindowing functionなので、OVER
と併せて使用する必要があります。 PARTITION
を指定しないでください。
SELECT *, ROW_NUMBER() OVER() AS row_num
FROM emp
--- other stuff
は少なくとも私のバージョンのhiveqlでは明示的な順序付けが必要なようです。 'SELECT *、ROW_NUMBER()OVER(ORDER BY some_emp_field)AS row_num FROM emp' – patricksurry
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
これはOPの質問にどのように関連していますか? – gobrewers14
@ GoBrewers14 - 私は答えにもう一つのレイヤーを追加し、row_numberを生成してそれを理解しています。これが役に立ったら嬉しいです:) – syadav
コメントを追加することを検討してください。 – syadav
これを試してみてください:
select row_number() OVER(), * from emp;
は、我々はrow_number
とともにOVER()
を使用することになっています。
これは私の答えとどのように違うのですか? – gobrewers14
大量のデータセット(つまり5,000万行以上)に対してこの種の分析関数を実行しようとすると、データの一貫性をテストするように注意してください。 ** V0.13とV0.14の**決定論的な方法**で微妙な**データの破損**が発生しています。行番号は順番に並んでいますが、数千行が削除され、他の行。しかしそれはHive-on-TEZ特有のものかもしれません。 –