dremio数据湖sql行列转换及转置

1、行转列 (扁平化)

数据准备 表 aa

1.1 cross join unnest

在Dremio中,UNNEST 函数用于将数组或复杂类型的列(如JSON、Map或Array类型)中的值“炸裂”(分解)成多行.

with aa as (
select '上海' as city, ARRAY['浦东新区','黄浦区']        as area
union 
select '北京' as city, ARRAY['朝阳区','海淀区','昌平区'] as area
)
select city
      ,area_b
from aa
CROSS JOIN UNNEST(aa.area) AS t(area_b)

1.2  flatten

将复合值分解为多行。FLATTEN 函数采用一 LIST 列并生成横向视图(即,包含引用 FROM 子句中它前面的其他表的相关性的内联视图)。

表达式的数据类型 必须为 LIST

with aa as (
select '上海' as city,ARRAY['浦东新区', '黄浦区'] as areas
union 
select '北京' as city,ARRAY['朝阳区', '海淀区','昌平区'] as areas
)
SELECT city,FLATTEN(areas) AS area
FROM aa;

两种函数 都能 把 数组 行转为列,结果如下

然而我们的初始数据可能是 带有分割符的字符串 而不是 数组

dremio 提供 字符 转换 为 数组正则表达式函数  REGEXP_SPLIT ( ) 实例如下:

with aa as(
select '上海' as id,'浦东新区,黄浦区'       as name
union
select '北京' as id,'朝阳区,海淀区,昌平区'  as name
)

SELECT REGEXP_SPLIT(name, 'r(?<=,)(?<=,$)', 'ALL', 1) AS "list"
from aa

结果:

更多dremio 图标类型识别:dremio数据类型图标识别

2 、列转行 

数据准备

2.1  LISTAGG

 将一组行连接成一个字符串列表,并在它们之间放置一个分隔符。 返回字符类型

with aa as (
select '上海' as city,'浦东区新' as area union select '上海' as city,'黄浦区' as area
union 
select '北京' as city,'朝阳区' as area   union select '北京' as city,'海淀区' as area
)
select city,LISTAGG(DISTINCT area, ' | ')
WITHIN GROUP (ORDER BY area) "city_list"
FROM aa
group by city

返回结果:

2.2 ARRAY_AGG

将提供的表达式聚合到一个数组中。返回数组类型

with aa as(
select '上海' as id,'浦东新区'  as name union select '上海' as id,'黄浦区'  as name
union
select '北京' as id,'朝阳区'  as name union select '北京' as id,'海淀区'  as name
union
select '北京' as id,'昌平区'  as name
)
SELECT id, ARRAY_AGG(name) 
FROM aa 
GROUP BY id 

结果:

3、转置 ,反转置

数据准备:

3.1 转置 ( PIVOT )

SELECT *
FROM aa
PIVOT (SUM(sales) FOR region IN ('North', 'South', 'East', 'West'))
order by product

结果:

3.2 反转置 (UNPIVOT

数据准备:

SELECT product, region, sales
FROM aa
UNPIVOT (sales FOR region IN (North, South, East, West)) 
order by product 

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/581413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024程诺申论突击理论刷题班

2024程诺申论突击理论刷题班&#xff0c;为备考者提供了系统而高效的申论学习平台。在这个班里&#xff0c;程诺老师以其深厚的理论功底和丰富的教学经验&#xff0c;引导我们深入理解申论的本质和技巧。刷题环节精心设计&#xff0c;让我们在实战中巩固知识&#xff0c;提升能…

Professional CUDA C Programming

2023/4/28 1.使用nvfrof时&#xff0c;报错 解决方法&#xff1a; 将路径 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\CUPTI\lib64 下的文件cupti64_2020.2.0.dll复制到路径 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin下即可。 2…

Innodb底层原理与Mysql日志机制到底怎么个事???

在学完Innodb底层原理与Mysql日志机制&#xff0c;自己进行总结&#xff0c;画了一张脑图&#xff0c;思路清晰许多 希望对大家也能有点帮助

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时&#xff0c;偶尔会出现这样的问题&#xff1a;打开了某个编辑器&#xff08;文件&#xff0c;下面统称文件&#xff09;后&#xff0c;再打开其他文件…

安装JAVA和java IDEA并汉化过程

1.安装java: 打开java的下载链接&#xff1a; Java Downloads | Oracle 然后选择对应的版本下载即可&#xff0c;我这里是windows 所以下载这个 然后正常一步步安装即可。 2.配置java环境&#xff1a; 在桌面右键此电脑然后点击属性——高级系统设置——环境变量——然后…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式&#xff0c;该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

【万字长文】看完这篇yolov4详解,那算是真会了

前言 目标检测作为计算机视觉领域的一个核心任务&#xff0c;其目的是识别出图像中所有感兴趣的目标&#xff0c;并给出它们的类别和位置。YOLO&#xff08;You Only Look Once&#xff09;系列模型因其检测速度快、性能优异而成为该领域的明星。随着YOLOv4的推出&#xff0c;…

网络安全的防护措施有哪些?

1. 安全策略和合规性 2. 物理和网络安全 3. 数据加密 4. 软件和系统更新 5. 访问控制 6. 威胁监测和响应 7. 员工培训和安全意识 8. 备份和灾难恢复 零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 网络安全的防护措施多种多样&#xff0c…

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中&#xff0c;JVM发现 某些资源不需要再使用的时候&#xff0c;就会自动把资源所占的内存给回收掉&#xff0c;就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”&#xff0c;“垃圾回收机制”也称"GC机制"。 对于Java代码…

排序算法(2)快排

交换排序 思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 一、冒泡排序 public static…

Sarcasm detection论文解析 | 通过阅读进行讽刺推理-Reasoning with sarcasm by reading in-between

论文地址 论文地址&#xff1a;[1805.02856] Reasoning with Sarcasm by Reading In-between (arxiv.org) 论文首页 笔记大纲 通过阅读进行讽刺推理论文笔记 &#x1f4c5;出版年份:2018&#x1f4d6;出版期刊:&#x1f4c8;影响因子:&#x1f9d1;文章作者:Tay Yi,Luu Anh…

FIR滤波器——DSP学习笔记三(包含一个滤波器设计的简明案例)

​​​​​​ 背景知识 FIR滤波器的特性与优点 可精确地实现线性相位响应&#xff08;Linear phase response&#xff09;&#xff0c;无相位失真&#xff1b; 总是稳定的&#xff0c;所有极点都位于原点 线性相位FIR滤波器的性质、类型及零点位置 冲击响应满足&#xff1a;奇…

挺看好的一位实习生,顶峰见!

大家好&#xff0c;我是程序员鱼皮。今天我要分享自己团队里一位全栈实习生的实习总结。 在实习期间&#xff0c;这位同学参与了多个项目的工作&#xff0c;包括企业动态公告系统的开发、企业周边系统的搭建、撰写技术教程、开发 IDEA 插件、构建云端管理平台等等。 实习近 3…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头&#xff08;买回来感觉画质很低&#xff0c;没有描述的4k&#xff0c;不过也够用于学习了&#xff09;,想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头&#xff0c;从而才能够对它进行一系列后续操作&#xff0c;诸如实…

网动统一通信平台存在任意文件读取漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 网动统一通信平台&#xff08;ActiveUC&#xff09…

AEMTO--一种自适应进化多任务优化框架

AEMTO–一种自适应进化多任务优化框架 title&#xff1a; Evolutionary Multitask Optimization With Adaptive Knowledge Transfer author&#xff1a; Hao Xu, A. K. Qin, and Siyu Xia. journal&#xff1a; IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION (TEVC) DOI&…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

B2B商城系统如何搭建?

相较于单个商家的独立商城&#xff0c;B2B商城系统凭借诸多优势成为电商领域中最受关注的一种模式。目前在政府、金融、汽车、跨境等行业领域都有广泛应用。那么&#xff0c;B2B商城系统如何搭建呢&#xff1f;我们从开发语言、功能模块、优势来进行分析。 一、B2B商城系统开发…

对抗攻击新手实战

实战核心思想&#xff1a; 训练x(输入&#xff09;&#xff0c;让第一次训练好的&#xff0c;正确的y去和我们想要误导机器去识别的类别的那个y做一个损失函数【loss torch.mean(y[:, 248])】&#xff0c;不同的是&#xff0c;我们其实希望是一个梯度上升&#xff0c;给图片加…

31 OpenCV 距离变换和分水岭算法

文章目录 距离变换分水岭算法distanceTransform 距离变换watershed 分水岭算法示例 距离变换 分水岭算法 distanceTransform 距离变换 void cv::distanceTransform (InputArray src,OutputArray dst,int distanceType,int maskSize,int dstType CV_32F) src:输入图像&#xf…