hive语句实现列转行

本文介绍了如何在Hive中使用explode函数实现列转行的操作,对比了Oracle中的unpivot函数,并提供了具体的建表语句和实际效果展示,展示了将多个字段拼接后拆分为多行数据的方法。

建表语句

CREATE  TABLE XXXX表(
  evel_id string DEFAULT NULL COMMENT 'xxxxid', 
  object_id string DEFAULT NULL COMMENT '所属对象', 
  object_name string DEFAULT NULL COMMENT '所属对象名称', 
  dept_id string DEFAULT NULL COMMENT '单位编码', 
  dept_name string DEFAULT NULL COMMENT '单位名称', 
  ......省略一堆字段
  rcount bigint DEFAULT NULL COMMENT '记录属性总数 ', 
  qcount bigint DEFAULT NULL COMMENT '问题属性总数', 
  nqcount bigint DEFAULT NULL COMMENT '新增问题总数 ', 
  sqcount bigint DEFAULT NULL COMMENT '解决问题总数 ', 
  score decimal(5,2) DEFAULT NULL COMMENT '属性分数', 
  create_date timestamp DEFAULT NULL COMMENT '创建时间', 
  update_date timestamp DEFAULT NULL COMMENT '更新时间', 
  create_person string DEFAULT NULL COMMENT '创建人'
)
COMMENT 'XXXX表'

原数据部分展示:
在这里插入图片描述

Oracle中列转行语法,使用 unpivot函数

unpivot(字段属性 for 字段别名 in(字段1 as 别名1,字段2 as 别名2 …))

select EPT_NAME as DEPT_NAME,
       OBJECT_NAME,
       OBJ_COUNT,
       ROUND(SUM(SCORE) / COUNT(*), 2) as SCORE
  from XXXX表
       unpivot(SCORE for OBJ_COUNT in(RCOUNT as '属性总数',
                                      QCOUNT as '问题属性总数',
                                      SCORE as '得分'))
 where 1 = 1
   AND SYS_ID = '1234567890'
 GROUP BY OBJECT_NAME, DEPT_NAME, OBJ_COUNT
 ORDER BY OBJECT_NAME;

实现效果:
在这里插入图片描述

hive中列转行语法,使用explode函数

因为LATERAL VIEW explode(split(字段,’,’))是将一个字段拆分展示为多条数据显示,所以使用CONCAT_WS语句,将多个字段拼接起来,可以满足将一条数据多个特定字段展示为多条数据一个特定字段。
LATERAL VIEW explode(split(CONCAT_WS(’,’,to_char(RCOUNT),to_char(QCOUNT),to_char(SCORE)),’,’)) mytable AS obj_view

 select DEPT_NAME ,
       OBJECT_NAME,
       ROUND(SUM(obj_view) / COUNT(*), 2) as SCORE
  from XXXX表 
   LATERAL VIEW explode(split(CONCAT_WS(',',to_char(RCOUNT),to_char(QCOUNT),to_char(SCORE)),',')) mytable AS obj_view
 where 1 = 1
   AND SYS_ID = '1234567890'
 GROUP BY OBJECT_NAME, DEPT_NAME,obj_view
 ORDER BY OBJECT_NAME ;

实现效果为:
在这里插入图片描述

最近将解释字段添加上的语句

select DEPT_NAME ,
       OBJECT_NAME,
       substr(obj_view,1,INSTR(obj_view,'|')-1) OBJ_COUNT,
       ROUND(SUM(substr(obj_view,INSTR(obj_view,'|')+1)) / COUNT(*), 2) as SCORE
  from XXXX表
   LATERAL VIEW explode(split(CONCAT_WS(',',
   CONCAT_WS('|','属性总数',to_char(RCOUNT)),
   CONCAT_WS('|','问题属性总数',to_char(QCOUNT)),
   CONCAT_WS('|','得分',to_char(SCORE))),',')) mytable AS obj_view
 where 1 = 1
   AND SYS_ID = '1234567890'
 GROUP BY OBJECT_NAME, DEPT_NAME,OBJ_COUNT
 ORDER BY DEPT_NAME DESC,OBJECT_NAME;

效果和Oracle实现的列转行效果一样
在这里插入图片描述

06-22
### 得物技术栈及开发者文档分析 得物作为一家专注于潮流商品的电商平台,其技术栈和开发者文档主要围绕电商平台的核心需求展开。以下是对得物技术栈及相关开发资源的详细解析: #### 1. 技术栈概述 得物的技术栈通常会涵盖前端、后端、移动应用开发以及大数据处理等多个领域。以下是可能涉及的主要技术栈[^3]: - **前端开发**: 前端技术栈可能包括现代框架如 React 或 Vue.js,用于构建高效、响应式的用户界面。此外,还会使用 Webpack 等工具进行模块化打包和优化。 - **后端开发**: 后端技术栈可能采用 Java Spring Boot 或 Node.js,以支持高并发和分布式架构。数据库方面,MySQL 和 Redis 是常见的选择,分别用于关系型数据存储和缓存管理。 - **移动应用开发**: 得物的移动应用开发可能基于原生技术(如 Swift/Kotlin)或跨平台框架(如 Flutter)。这有助于确保移动端应用的性能和用户体验一致性。 - **大数据云计算**: 在大数据处理方面,得物可能会使用 Hadoop 或 Spark 进行数据挖掘和分析。同时,依托云服务提供商(如阿里云或腾讯云),实现弹性扩展和资源优化。 #### 2. 开发者文档分析 类似于引用中提到的 Adobe 开发者文档模板[^2],得物也可能提供一套完整的开发者文档体系,以支持内部团队协作和外部开发者接入。以下是开发者文档可能包含的内容: - **API 文档**: 提供 RESTful API 或 GraphQL 的详细说明,帮助开发者快速集成得物的功能模块,例如商品搜索、订单管理等。 - **SDK 集成指南**: 针对不同平台(如 iOS、Android 或 Web)提供 SDK 下载和集成教程,简化第三方应用的开发流程。 - **技术博客**: 分享得物在技术实践中的经验成果,例如如何优化图片加载速度、提升应用性能等。 - **开源项目**: 得物可能将部分技术成果开源,供社区开发者学习和贡献。这不仅有助于提升品牌形象,还能吸引更多优秀人才加入。 #### 3. 示例代码 以下是一个简单的示例代码,展示如何通过 RESTful API 调用得物的商品搜索功能(假设接口已存在): ```python import requests def search_items(keyword, page=1): url = "https://api.dewu.com/v1/items/search" headers = { "Authorization": "Bearer YOUR_ACCESS_TOKEN", "Content-Type": "application/json" } params = { "keyword": keyword, "page": page, "size": 10 } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: return response.json() else: return {"error": "Failed to fetch data"} # 调用示例 result = search_items("Air Jordan", page=1) print(result) ``` 此代码片段展示了如何通过 Python 请求得物的 API,并获取指定关键词的商品列表。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值