当前位置: 首页 > article >正文

Hive PERCENTILE_APPROX 函数详解

Hive PERCENTILE_APPROX 函数详解

PERCENTILE_APPROX 是 Hive 中一个重要的函数,用于近似计算数据的百分位数。本文介绍 PERCENTILE_APPROX 的原理、参数以及核心概念 B 值等信息。


函数语法

PERCENTILE_APPROX(expression, percentage [, B])
  • expression: 输入的数值列,通常是需要计算百分位数的字段。
  • percentage: 百分位数,取值范围为 0 到 1,例如:0.5 表示中位数。
  • B: (可选)样本精度参数,控制采样点数量,默认为 10,000

B 值是什么?

PERCENTILE_APPROX 中,B 值是样本精度参数,用于控制近似百分位计算时使用的样本大小。它代表在计算过程中保存的 数据压缩点数量

B 值的作用

  1. 控制样本大小

    • 数据集通常可能很大,直接对整个数据集计算百分位会消耗巨大的资源。
    • B 值决定了采样时保存的数据点数量:
      • B 越大,样本越多,结果越精确。
      • B 越小,样本越少,结果的近似误差会增加。
  2. 平衡内存和精度

    • 高 B 值:需要更多内存,但结果更精确。
    • 低 B 值:节省内存,但可能导致误差增加。

原理及影响

算法原理

PERCENTILE_APPROX 使用了一种类似于 TDigest 压缩算法 的方法:

  • 数据经过分组和排序后,压缩为少量数据点(称为压缩点)。
  • 这些压缩点用来估算数据分布,从而计算近似的百分位数。
  • B 值决定了压缩点的数量,更多压缩点能够更准确地捕捉数据分布。

B 值的效果

B 值结果偏差内存占用计算速度适用场景
1,000±2%资源受限、快速估算时使用
10,000±0.5%中等中等默认值,适合大多数场景
50,000±0.1%需要高精度时使用

示例

使用默认 B 值(10,000)

SELECT PERCENTILE_APPROX(value, 0.5) AS median
FROM your_table;

自定义 B 值(5,000)

SELECT PERCENTILE_APPROX(value, 0.5, 5000) AS median
FROM your_table;

更高精度(50,000)

SELECT PERCENTILE_APPROX(value, 0.5, 50000) AS median
FROM your_table;

如何选择合适的 B 值?

  1. 数据规模

    • 小规模数据集(<1,000,000 行):使用高 B 值(如 20,000 或更高)。
    • 大规模数据集(>10,000,000 行):选择默认值 10,000,或根据资源调整。
  2. 性能需求

    • 快速估算:选择低 B 值(1,000 - 5,000)。
    • 高精度需求:选择高 B 值(>10,000)。
  3. 内存资源

    • 内存足够:选择较大的 B 值以提高精度。
    • 内存受限:选择较小的 B 值避免计算内存溢出。

总结

  • B 值是控制样本数量的参数,直接影响采样精度。
  • 默认值(10,000)适合大多数场景,能够很好地平衡计算精度和性能。
  • 根据具体的数据规模、性能需求和内存资源,可以调整 B 值来优化结果。

通过合理设置 PERCENTILE_APPROX 的参数,您可以高效计算大数据集的百分位数,既能节省资源,又能保证计算结果的精度。


http://www.kler.cn/a/512615.html

相关文章:

  • Unity预制体未即时刷新
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
  • 游戏引擎学习第80天
  • 显卡(Graphics Processing Unit,GPU)架构详细解读
  • MySQL配置my.ini文件
  • 【云岚到家】-day03-门户缓存实现实战
  • 《鸿蒙 HarmonyOS 应用开发从入门到精通(第 2 版)》学习笔记 ——HarmonyOS 环境搭建之安装DevEco Studio
  • 【陕西省乡镇界】面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移内容测评
  • TCP创建通信前的三次握手(为啥不是两次?)
  • 创建基于Prism框架的WPF应用(NET Framework)项目
  • 打开DevEco Studio后,选择“Create New Project”
  • docker运行Java项目,Kaptcha因为字体缺失没法显示验证码图片
  • Spring Boot自动配置原理:如何实现零配置启动
  • STM32之CubeMX新建工程操作(十八)
  • npm的包管理
  • Redis Windows 解压版安装
  • AIGC视频生成模型:ByteDance的PixelDance模型
  • 51c~缺陷检测~合集2
  • CAN 网络介绍
  • mysql 如何清理磁盘碎片
  • 怎么使用langchain和ollama自己简单开发搭建一个本地有记忆的大模型?
  • LLM 的星辰大海:大语言模型的前世今生
  • Python毕业设计选题:基于django+vue的二手电子设备交易平台设计与开发
  • ServiceEntry 是一种用于将外部服务引入到Istio内部的服务注册表中的配置资源。
  • kafka学习笔记6 ACL权限 —— 筑梦之路
  • PC端自动化测试实战教程-1-pywinauto 环境搭建(详细教程)