1

単一の列に JSON テキストが含まれる Hive テーブルを定義しました。

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/';

JSON 内で発生するすべてのフィールド名とその頻度 (つまり、属性がテーブルに表示される合計回数) を一覧表示できる Presto/Athena クエリはありますか?

4

2 に答える 2

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
于 2017-04-10T01:44:10.870 に答える
0
  • マルチレベルのドキュメントをサポート
  • ネスト要素のキーを無視します

select    key
         ,count(*)
from      t cross join 
          unnest (regexp_extract_all(json,'"([^"]+)"\s*:\s*("[^"]+"|[^,{}]+)',1)) u (key)
group by  key
;
于 2017-04-10T21:32:00.287 に答える