Hive PERCENTILE_APPROX 函数详解

server/2025/1/21 12:13:48/

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.ppmy.cn/server/160166.html

相关文章

从零到一:打造属于你的AI智能体,支持本地部署

国外卷智能体&#xff0c;国内也都在搞 AI Agent&#xff0c;2025 年也将成为 Agent 的元年。构建智能体主要两种情况&#xff0c;一个是工作流模式&#xff0c;另外一种是直接开发应用&#xff0c;接下来分别给大家介绍一下两种产品和构建过程。工作流模式&#xff0c;以 Coze…

NEC纪实 :2024全国机器人大赛 Robocon 常州工学院团队首战国三

全国机器人大赛 Robocon 常州工学院团队首战国三 通宵7天7夜&#xff0c;常州工学院RC团队&#xff0c;首次闯入全国机器人大赛国赛&#xff0c;并成功得分&#xff01; 不同于老牌强队&#xff0c;常州工学院&#xff08;下面用"常工"代替&#xff09;的这只队伍&…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

postman请求参数化

postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…

C语言之装甲车库车辆动态监控辅助记录系统

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之装甲车库车辆动态监控辅助记录系统 目录 一、前言 1.1 &#xff08;一&#xff09;…

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中&#xff0c;我们将引导你完成安装Go编程语言和Gin框架的过程&#xff0c;Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中&#xff0c;本指南是高效而强大的web开发路线图。 安装…

鸿蒙Harmony json转对象(1)

案例1 运行代码如下 上图的运行结果如下: 附加1 Json_msg interface 案例2 import {JSON } from kit.ArkTS; export interface commonRes {status: numberreturnJSON: ESObject;time: string } export interface returnRes {uid: stringuserType: number; }Entry Component …

MySQL 窗口函数

MySQL 窗口函数 1&#xff0c;窗口函数 1.1&#xff0c;什么是窗口函数1.2&#xff0c;基本语法 2&#xff0c;函数详解 2.1&#xff0c;聚合函数2.2&#xff0c;排序函数2.3&#xff0c;偏移函数2.4&#xff0c;值函数 3&#xff0c;进阶用法 1&#xff0c;窗口函数 1.1&am…