2 votes

Comment puis-je faire un type de colonne par distribution dans une colonne dans Hive SQL ?

Je veux faire un résultat dans la ruche comme ceci :

| COL1 | HISTOGRAM             |
+------+-----------------------+
|  a   | {"A":2, "B":2}        |
|  b   | {"C":2, "A":1, "B":1} |

de ce tableau :

| COL1 | COL2 |
+------+------+
| a    | A    |
| a    | B    |
| a    | A    |
| a    | B    |
| b    | A    |
| b    | B    |
| b    | C    |
| b    | C    |

Presto SQL a comme ce que je veux, je pense :

select COL1, histogram(COL2)
from sample_table 
group by COL1

1voto

leftjoin Points 6979

Vous pouvez calculer les comptages en groupant par col1, col2, puis en agrégeant les chaînes col2:cnt en utilisant collect_set ou collect_list dans un tableau, concaténer le tableau avec une virgule comme délimiteur et convertir la chaîne résultante en carte en utilisant la fonction str_to_map .

Démonstration :

select stack (8, --number of tuples
 'a','A'
,'a','B'
,'a','A'
,'a','B'
,'b','A'
,'b','B'
,'b','C'
,'b','C'
) as (COL1,COL2)
)

select col1, str_to_map(concat_ws(',',collect_set(concat(col2,':',cnt)))) histogram
from
(
select col1, col2, count(*) cnt from data_example group by col1, col2
)s
group by col1
;

Résultat :

col1    histogram
a   {"A":"2","B":"2"}
b   {"A":"1","B":"1","C":"2"}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X