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

Ale*_*x R 1 json presto amazon-athena

我定义了一个 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/';
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ips 5

使用JSON函数解析 JSON 并将其转换为地图。然后提取密钥并取消嵌套它们。最后,使用普通的 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
Run Code Online (Sandbox Code Playgroud)