IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【presto】行转列和列转行 -> 正文阅读

[大数据]【presto】行转列和列转行

行转列

数据源:

select *
  from test.tmp_row_to_col
;
568810800017635002	210100026066367206
568810800017635002	210100026070369019
568810800017635002	210100026038823395
568810800017635002	210100026038921817
568811800170738001	210100016048730468
568811800170738001	210100016034424946
568811800170738001	210100016034424947
568811800170738001	210100016034424948
568817000105010000	210100006034670622
568817000105010000	210100006045431694

最终结果是这样
在这里插入图片描述
hive语法
collect_set转为数组并去重,concat_ws将数组用逗号间隔连接成字符串

select user_id, concat_ws(',', collect_set(order_id)) as order_ids
  from test.tmp_row_to_col
 group by user_id
;

+---------------------+------------------------------------------------------------------------------+
|       user_id       |                                  order_ids                                   |
+---------------------+------------------------------------------------------------------------------+
| 568811800170738001  | 210100016034424946,210100016048730468,210100016034424947,210100016034424948  |
| 568810800017635002  | 210100026066367206,210100026070369019,210100026038823395,210100026038921817  |
| 568817000105010000  | 210100006045431694,210100006034670622                                        |
+---------------------+------------------------------------------------------------------------------+

presto语法
array_agg转为数组,array_distinct去重,array_join将数组用逗号间隔连接成字符串

select user_id, array_join(array_distinct(array_agg(order_id)), ',') as order_ids
  from test.tmp_row_to_col
 group by user_id
;

在这里插入图片描述

列转行

即将上面的两张图顺序调换一下

hive语法
split将````order_ids拆分成数组,lateral view explode```将数组炸裂开


select user_id, order_id
  from test.tmp_col_to_row
lateral view explode(split(order_ids, ',')) b  as order_id
;

+---------------------+---------------------+
|       user_id       |      order_id       |
+---------------------+---------------------+
| 568811800170738001  | 210100016048730468  |
| 568811800170738001  | 210100016034424947  |
| 568811800170738001  | 210100016034424948  |
| 568811800170738001  | 210100016034424946  |
| 568817000105010000  | 210100006034670622  |
| 568817000105010000  | 210100006045431694  |
| 568810800017635002  | 210100026066367206  |
| 568810800017635002  | 210100026070369019  |
| 568810800017635002  | 210100026038823395  |
| 568810800017635002  | 210100026038921817  |
+---------------------+---------------------+

presto语法
splitorder_ids拆分成数组,````cross join unnest```将数组炸裂开,要注意一下两种语法的表名缩写位置

select a.user_id
    , b.order_id
from tmp.tmp_col_to_row a
cross join unnest(split(order_ids, ',')) as b(order_id) ;

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:25:14  更:2022-05-05 11:29:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:45:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码