2017-06-26 6 views
0

私は、どのようにピボットして、2番目の列の値に基づいて合計するのかを判断しようとしているテーブルがあります。HIVEピボットとサムスン

例入力:

|own|pet|qty| 
|---|---|---| 
|bob|dog| 2 | 
|bob|dog| 3 | 
|bob|dog| 1 | 
|bob|cat| 1 | 
|jon|dog| 1 | 
|jon|cat| 1 | 
|jon|cat| 1 | 
|jon|cow| 4 | 
|sam|dog| 3 | 
|sam|cow| 1 | 
|sam|cow| 2 | 

出力例:

|own|dog|cat|cow| 
|---|---|---|---| 
|bob| 6 | 1 | | 
|jon| 1 | 2 | 4 | 
|sam| 1 | | 3 | 
+0

あなたがしようとしているもののいくつかのコードスニペットを提供してください、それは他人のために参考になります。役に立つヒントについては、https://stackoverflow.com/help/how-to-askを参照してください。 – Nehal

答えて

0

使用casesum()

select own, sum(case when pet='dog' then qty end) as dog, 
      sum(case when pet='cat' then qty end) as cat, 
      sum(case when pet='cow' then qty end) as cow 
    from your_table 
group by own; 
+0

これは、値が分かっている場合はうまくいくが、各フィールドを指定する必要がなく、これを行う方法があるかどうか知っていますか?私がデータを扱っているデータセットの中には、動的なものがあります。 – Jay

+1

HiveQLでは、列を知っておく必要があります。動的SQLが必要な場合は、シェル/ java/etcを使用して、別のクエリ値を選択し、クエリをビルドしてハイブで実行してください。 – leftjoin

1

動的データのためにあなたがMAP

を使用することができます
+-----+---------------------------------+ 
| own |    pet_qty    | 
+-----+---------------------------------+ 
| bob | {"cat":"1","dog":"6"}   | 
| jon | {"cat":"2","cow":"4","dog":"1"} | 
| sam | {"cow":"3","dog":"3"}   | 
+-----+---------------------------------+ 
+0

こんにちは、この提案を見ましたか? –

+0

私はあなたのソリューションが好きです。それをinotカラムフォーマットに戻す方法はありますか? – Duesentrieb

+0

ペットの値(猫、犬など)を知っている場合は事前に –