Presto/Athena -查询以发现JSON属性频率?

xvw2m8pv  于 12个月前  发布在  Presto
关注(0)|答案(2)|浏览(120)

我定义了一个Hive表,其中一列包含JSON文本:

CREATE EXTERNAL TABLE IF NOT EXISTS my.rawdata (
  json string
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = '\n',
   'quoteChar' = '\0',
   'escapeChar' = '\r'
)
STORED AS TEXTFILE
LOCATION 's3://mydata/';

字符串
是否有一个Presto/Athena查询可以列出JSON中出现的所有字段名称及其频率(即属性在表中出现的总次数)?

bpsygsoo

bpsygsoo1#

使用JSON函数解析JSON并将其转换为map。然后提取键并将其解嵌套。最后,使用普通的SQL聚合:

SELECT key, count(*)
FROM (
  SELECT map_keys(cast(json_parse(json) AS map(varchar, json))) AS keys
  FROM rawdata
)
CROSS JOIN UNNEST (keys) AS t (key)
GROUP BY key

字符串

i2loujxw

i2loujxw2#

  • 支持多层次文档
  • 忽略嵌套元素的键
select    key
         ,count(*)
from      t cross join 
          unnest (regexp_extract_all(json,'"([^"]+)"\s*:\s*("[^"]+"|[^,{}]+)',1)) u (key)
group by  key
;

字符串

相关问题