永州网,内容丰富有趣,生活中的好帮手!
永州网 > 知识 > 正文

大数据仓库,Hive复杂的数据结构,SQL列转行操作

时间:2021-06-30 18:25:35

相关推荐

大数据仓库,Hive复杂的数据结构,SQL列转行操作

hive是大数据仓库,最常用的一种用作离线分析的数据仓库。Hive 使用类SQL 查询语法, 最大限度的实现了和SQL标准的兼容,大大降低了传统数据分析人员处理大数据的难度。同时他使用JDBC 接口/ODBC接口,开发人员更易开发应用,使不会编程的人员也能快速上手Hive操作,进行数据分析。

HIve的复杂数据类型

1,STRUCT

struct类似于java的类变量使用,Hive中定义的struct类型也可以使用点来访问。从文件加载数据时,文件里的数据分隔符要和建表指定的一致。例如:struct(val1, val2, val3, ...) ,只有字段值。

2,ARRAY

array表示一组相同数据类型的集合,下标从零开始,可以用下标访问。例如:arr[0]

3,MAP

map是一组键值对的组合,可以通过key访问value,键值之间同样要在创建表时指定分隔符。

例如:map_col["name"]

当然Hive除了支持STRUCT、ARRAY、MAP这些原生集合类型,还支持集合的组合。注意:Hive不支持集合里再组合多个集合。

HIve复杂数据结构的用法

1,模仿Oracle数据库操作,构建dual表。

createtabledual(idint);

insertintotabledualvalues(1);

insertintotabledualvalues(2);

2,创建带有复合结构的表。

createtablecomplex(

idint,

struct_colstruct,

array_colarray,

map_colmap,

union_colmap>

)

ROWFORMATDELIMITEDFIELDSTERMINATEDBY","

COLLECTIONITEMSTERMINATEDBY"-"

MAPKEYSTERMINATEDBY":";

注意上文建表语句下面三行的用法:

--这个子句表明hive使用字符‘,’作为列分隔符。

ROW FORMAT DELIMITED FIELDS TERMINATED BY ","

--这个子句表明hive使用字符‘-’作为集合元素间分隔符(一个字段各个item的分隔符)。

COLLECTION ITEMS TERMINATED BY "-"

--这个子句表明hive使用字符作为map的键和值之间分隔符。

MAP KEYS TERMINATED BY ":"

3,插入数据,使用insert .... select语法插入数据。

插入数据

insertoverwritetablecomplex

select

id,

named_struct("name","toutiao","wukong","wd")asstruct_col,

array("12","21","13")asarray_col,

map("jinri","toutiao")asmap_col,

map("jinri",array("12","21","13"))asunion_col

fromdual;

4,使用HQL语句进行查询。

-查询struct

selectstruct_col.namefromcomplex;

--查询数组第一个元素

selectarray_col[0]fromcomplex;

--查询map中key对应的value值

selectmap_col["jinri"]fromcomplex;

--查询复杂结构map>中key对应的value值

selectunion_col["jinri"]fromcomplex;

--查询复杂结构map>中key对应的value值(数组)中的第一个元素

selectunion_col["jinri"][0]fromcomplex;

SQL的列转行用法

1,先来了解一下case when then else end函数的用法

SELECT

case-------------如果

whensex="0"then"男"-------------sex="0",则返回值"男"

whensex="1"then"女"-------------sex="1",则返回值"女"

else2-------------其他的返回"其他’

end-------------结束

FROMstudent

---用法一:

select

case

whensex="0"then"男"

whensex="1"then"女"

else"其他"end

fromstudent

---用法二:

selectsex,

case

when"0"then"男"

when"1"then"女"

else"其他"end

fromstudent

2,列转行的用法

准备数据

yearmonthamount

2019110

2019220

2019330

2019440

2020150

2020260

2020370

2020480

转换成下面的数据格式

yearmth1mth2mth3mth4

201910203040

201950607080

转换操作

selectyear,

sum(CASEmonthwhen"1"thenamountELSE0END)mth1,

sum(CASEmonthwhen"2"thenamountELSE0END)mth2,

sum(CASEmonthwhen"3"thenamountELSE0END)mth3,

sum(CASEmonthwhen"4"thenamountELSE0END)mth4

fromtempgroupbyyear

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
SQL Server扩展存储过程的实现方法探究

SQL Server扩展存储过程的实现方法探究

...活性,并学会如何利用扩展存储过程实现更复杂的数据库操作和业务逻辑。最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有给你解答,史上最全最棒的详细解说让你一看就懂。获得MSSQL的版本号execute master..sp_msget...

2024-02-21

无线网络安全:如何有效断开防火墙保护的WiFi连接

无线网络安全:如何有效断开防火墙保护的WiFi连接

...新和设置,以满足网络安全方面的需求。然而,在执行此操作时需要谨慎,确保在断开WiFi连接的同时不影响网络设备的正常运行,以避免出现意外的安全隐患。因此,在进行这样的操作时,需要确保有足够的网络管理和安全知...

2024-02-25

Excel中如何对多个工作簿进行合并操作

Excel中如何对多个工作簿进行合并操作

...个工作薄中的数据汇总到一个工作薄中,从而方便后续的操作和分析。掌握Excel工作薄合并的技巧,能够提高工作效率,简化数据处理流程,为工作和决策提供更有力的支持。大家好,上节课我们分享了ISERROR()函数的用法,那本...

2024-03-04

PHP/MySQL三日通:深入学习第二天

PHP/MySQL三日通:深入学习第二天

...库的设计与优化、SQL语句的高级应用、PHP与MySQL的连接与操作等内容。通过系统化的学习方式和多种实例演练,读者将能够更加深入地理解PHP与MySQL的使用,为日后的应用和开发奠定坚实的基础。给自己一点时间接受自己,爱自己...

2024-02-03

在Spring中用select last insert id()时遇到问题

在Spring中用select last insert id()时遇到问题

...开发人员可能会遇到一些问题。这个问题通常涉及数据库操作的事务管理和自动生成的ID的获取。由于事务可能在插入数据之后立即执行查询操作,导致无法获取到刚刚插入的自动生成的ID。解决这个问题可能需要使用特定的数...

2023-03-05