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

Hive 查询各类型专利 top10 申请人及专利申请数

Hive 查询各类型专利 top10 申请人及专利申请数

一、背景

在专利数据处理中,我们常常需要分析不同类型专利下申请人的活跃度。例如,给定一个专利明细表 t_patent_detail,其中包含专利号、专利名称、专利类型、申请时间、授权时间和申请人等信息,且一个专利可能有多个申请人(以分号隔开)。我们的目标是找出各类型专利 top10 申请人以及他们对应的专利申请数。

二、数据结构

我们的数据存储在名为 t_patent_detail 的表中,其表结构如下:

  • 专利号(patent_id):每个专利的唯一标识符。
  • 专利名称(patent_name):专利的名称,描述专利的内容。
  • 专利类型(patent_type):例如发明创造、实用新型等不同类型的专利分类。
  • 申请时间(aplly_date):专利申请的日期。
  • 授权时间(authorize_date):专利获得授权的日期。
  • 申请人(apply_users):一个或多个申请人的名称,多人之间以分号分隔。

以下是一些示例数据:

patent_idpatent_namepatent_typeaplly_dateauthorize_dateapply_users
CN201821413799.7一种用于合金板棒材的往复式感应加热设备发明创造2018/8/302019/8/9朱春野
CN201911153500.8转化 DNA 回收率的检测方法及引物发明创造2019/11/222020/1/10陶启长;韦东
CN202011144174.7一种经修饰荧光探针及其应用发明创造2020/10/232020/11/20陶启长;韦东;余明伟
CN201920792416.X适用于中型桌面仪器的隔离装置实用新型2019/5/292020/4/17许亦琳;余明伟;杨华
CN201920973176.3一种高性价离心管冻存盒实用新型2019/6/262020/4/17许亦琳;余明伟;邬剑星;王敏生

三、查询思路

  1. 第一步:处理申请人字段
    由于每个专利可能有多个申请人,我们需要将申请人字段“炸裂”(使用 Hive 的 explode 函数),将每个申请人拆分成单独的行。这里使用 split 函数将以分号分隔的申请人字符串拆分成数组,然后使用 explode 函数将数组中的每个元素(即每个申请人)展开。
  2. 第二步:分组统计
    对处理后的申请人进行分组,并使用 count(*) 函数统计每个申请人的专利申请数。同时,使用 rank() 函数按照专利申请数进行排名,以便后续找出 top10 申请人。

四、Hive 查询语句解析

以下是实现上述功能的 Hive 查询语句:

--各类型专利 top10 申请人,以及对应的专利申请数
select t1.apply_name `申请人`,count(*) `专利申请数`,rank() over(order by
count(*) desc) `专利数排名`
from (
    --先将申请人字段炸裂
    select d.*, t1.coll `apply_name`
    from t_patent_detail d
    lateral view explode(split(apply_users,';')) t1 as coll
) t1
group by t1.apply_name; --按照申请人分组
  • 在子查询中:
    • from t_patent_detail d 从专利明细表开始查询。
    • lateral view explode(split(apply_users,';')) t1 as coll 这部分是关键。首先,split(apply_users,';')apply_users 字段(申请人字段)按照分号进行拆分,得到一个申请人名称的数组。然后,explode 函数将这个数组展开,每个元素(申请人名称)成为单独的一行。t1 是一个临时表别名,coll 是展开后的申请人名称列的别名。d.* 表示选择原始表中的所有其他列。
  • 在外部查询中:
    • group by t1.apply_name 按照申请人名称进行分组。
    • count(*) 统计每个申请人的专利申请数。
    • rank() over(order by count(*) desc) 使用 rank 函数按照专利申请数降序排名,这里虽然没有筛选 top10 的步骤,但可以根据这个排名在后续进一步处理得到 top10 的结果。

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

相关文章:

  • python魔术方法的学习
  • MacOS 本地生成SSH key并关联Github
  • android dvr黑屏
  • Unity3D 包体裁剪与优化详解
  • wafw00f源码详细解析
  • Day09 C++ 存储类
  • 20241105编译荣品的Android13并给荣品PRO-RK3566开发板刷机
  • 【网络】传输层——UDP协议
  • #渗透测试#SRC漏洞挖掘#深入挖掘CSRF漏洞01
  • 基于卷积神经网络的车辆损坏部位检测系统带gui
  • 基于ADC12DJ5200 采样率10.4GS/s的AD子卡设计方案
  • 【数学二】线性代数-向量-向量组的秩、矩阵得秩
  • Oracle EBS工具脚本
  • 科大讯飞面经,蛮简单的
  • C++数学
  • 1547. 切棍子的最小成本-cangjie
  • STM32F103C8T6学习笔记4--模拟旋转编码器的按键中断
  • 【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)
  • 【业务】支付总结和GP支付功能测试
  • LRU缓存算法
  • Java集合框架之数组列表(ArrayList)
  • SDL事件相关
  • 中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通
  • Objective-C 1.0和2.0有什么区别?
  • git中使用tag(标签)的方法及重要性
  • 股票量化实时行情接口WebSocket接入Python封装