Как сгладить JSON значения в счетчиках частоты в SQL - PullRequest
0 голосов
/ 17 марта 2020

У меня есть столбец с JSON значениями, такими как:

{'A': 'true', 'B': 'false', 'C': 'true'}
{'A': 'true', 'C': 'false'}
{'D': 'true'}
{'C': 'true', 'A': 'false'}

Я хотел бы создать запрос SQL, который подсчитывает количество записей с каждой комбинацией ключ-значение в json.

Обратите внимание, что ключи и значения заранее неизвестны.

Таким образом, результат выше будет:

2   A=true
1   A=false
1   B=false
2   C=true
1   C=false
1   D=true

Как я могу это сделать?

1 Ответ

2 голосов
/ 18 марта 2020
SELECT a1||':'||a2, count(*) from (
  SELECT map_entries(cast(json_parse(x) as MAP<VARCHAR, VARCHAR>)) row from 
    (VALUES ('{"A": "true", "B": "false", "C": "true"}'), ('{"A": "true", "C": "false"}'), ('{"D": "true"}'), ('{"C": "true", "A": "false"}')) as t(x)) 
    as nested_data CROSS JOIN UNNEST(row) as nested_data(a1, a2) 
group by 1;
 _col0  | _col1 
---------+-------
 D:true  |     1 
 B:false |     1 
 C:false |     1 
 C:true  |     2 
 A:false |     1 
 A:true  |     2 

https://prestosql.io/docs/current/functions/map.html

...