HISTOGRAM

简介

HISTOGRAM
HISTOGRAM
函数统计表达式中每个值出现的次数,返回一个
MAP<STRING, STRING>
MAP<STRING, STRING>
,key 是值的字符串形式,value 是该值出现的次数(也是字符串类型)。适合快速了解某列的值分布、找出高频值。

语法

HISTOGRAM(expr)

参数

  • expr
    expr
    :任意类型的表达式,通常为列名。
    NULL
    NULL
    值不计入结果。

返回结果

  • 返回值类型为
    MAP<STRING, STRING>
    MAP<STRING, STRING>
  • key 是每个不同值转为字符串后的形式,value 是该值出现的次数(字符串类型,如
    "2"
    "2"
    而非
    2
    2
    )。
  • NULL
    NULL
    值被忽略,不出现在结果 map 中。

示例

基础用法:统计值分布

SELECT HISTOGRAM(v) FROM (VALUES (1),(2),(2),(3)) t(v);

+---------------------------+ | histogram(v) | +---------------------------+ | {"1":"1","2":"2","3":"1"} | +---------------------------+

结合 GROUP BY:按分组统计值分布

SELECT dept, HISTOGRAM(level) FROM (VALUES ('eng', 'junior'), ('eng', 'senior'), ('eng', 'senior'), ('sales', 'junior'), ('sales', 'junior') ) t(dept, level) GROUP BY dept;

+-------+------------------------------------+ | dept | histogram(level) | +-------+------------------------------------+ | eng | {"junior":"1","senior":"2"} | | sales | {"junior":"2"} | +-------+------------------------------------+

使用 MAP_KEYS / MAP_VALUES 访问结果

MAP_KEYS
MAP_KEYS
返回所有出现的值,
MAP_VALUES
MAP_VALUES
返回对应的计数(字符串),可配合
CAST
CAST
转为数值做进一步计算:

SELECT MAP_KEYS(HISTOGRAM(v)) AS values, MAP_VALUES(HISTOGRAM(v)) AS counts FROM (VALUES (1),(2),(2),(3)) t(v);

+-----------+-----------+ | values | counts | +-----------+-----------+ | [1, 2, 3] | [1, 2, 1] | +-----------+-----------+

注意事项

  • 返回类型是
    MAP<STRING, STRING>
    MAP<STRING, STRING>
    ,value 为字符串形式的计数,数值运算前须
    CAST
    CAST
  • NULL
    NULL
    值不计入统计,也不出现在结果 map 的 key 中。
  • 结果 map 中 key 的顺序不保证,不同执行结果顺序可能不同。
  • 不支持
    DISTINCT
    DISTINCT
    ,因为函数本身已对每个不同值单独计数。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询