前言:
眼前大家对“hive元数据表名”都比较重视,各位老铁们都想要知道一些“hive元数据表名”的相关资讯。那么小编在网摘上收集了一些关于“hive元数据表名””的相关资讯,希望你们能喜欢,看官们快快来学习一下吧!hive是基于Hadoop的一个数据仓库工具,主要是用来进行数据的提取、转化和加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句。
在学习hive sql之前,我们需要对hive中常用的数据类型有一个基本的了解,这对于后面的学习会起到很大的帮助作用,如:建表、函数的使用、自定义函数等都需要考虑数据类型。
hive sql中的数据类型从大类上可分为如下两类:基本数据类型和复杂数据类型。
其中基本数据类型和大多数关系型数据库相近。
接下来我会详细介绍hive sql中常用数据类型:
1、基本数据类型:
这里主要对hive中常用的基本数据类型进行介绍,具体会从范围和用途进行介绍。
(1)数值型:
数值型又可分为整数型和浮点型。
大类
类型
范围
用途描述
整数型
tinyint
-128 ~ 127
1byte,有符号整数。
int
-2^32~ 2^32-1
4byte,有符号整数。
bigint
-2^64~ 2^64-1
8byte,有符号整数。
浮点型
float
-3.40E+38~+3.40E+38
4byte,单精度,浮点数值。
double
-1.79E+308~+1.79E+308
8byte,双精度,浮点数值。
decimal(size,d)
高精度浮点型
任意精度,有符号小数。
说明:
1)DECIMAL(n,m)代表最多n位数字,m位小数;
2)如果没有指定参数,那么默认是DECIMAL(10,0),即没有小数位。
(2)字符串型:
类型
用途描述
示例
char
固定长度的字符串,最大255。
"a",'b'
varchar
可变长度的字符串。
"a",'b'
string
可变长度的字符串。
"a",'b'
说明:hive中的string类型相当于mysql数据库中的varchar类型,是一个可变的字符串数据类型。
(3)日期和时间型:
日期和时间型主要分为date(日期)和timestamp(时间戳)。
类型
用途描述
示例
timestamp
时间戳,纳秒精度
1625733394
date
日期
"2021-07-09",'2021-07-09'
(4)布尔型:
在实际中,有时候需要对一个属性进行判断为“是”或“否”,这个时候就可以用到布尔类型的数据类型了。
类型
范围
用途描述
boolean
布尔类型(取值范围:true,false)
true/false
(5)其他类型:
类型
用途描述
binary
字节数组
2、复杂数据类型:
hive中常用的复杂数据类型有以下三类:ARRAY(数组)、MAP(键-值) 和 STRUCT(结构体)。
(1)array:
array表示一组相同数据类型的集合,索引从0开始,可以通过索引访问数据。
例如:字段name的数据类型为数组array,数据[‘A’, ‘D’]可以通过索引获取值,name[0]的值为A,name[1]的值为B。
语法:
array<data_type>
案例:获取数组array类型的字段中的数据。
一、生成数据,以便用代码实现:
1、创建表:
create table temp.user_address_temp(name string,address array<string>)row format delimited fields terminated by '\t'collection items terminated by ',';
说明:collection items terminated by ',' 指定数组中每个元素的分隔符;
2、插入数据,以便校验结果:
insert into table temp.user_address_temp select '小希', ARRAY('深圳', '武汉', '北京')union all select '可可', ARRAY('北京', '天津')union all select '丸子', ARRAY('杭州', '南京');
3、查看表中的数据:
select * from temp.user_address_temp;
结果如下:
二、查看结果,获取数组字段中的数据,具体如下:
方法:通过访问数组的序号可以获取数组中对应位置的数据。
这里分别获取数组address中的第一个、第二个、第三个数据:
代码如下:
select name, address[0] as first_values, -- address中的第一个数据 address[1] as second_values, -- address中的第二个数据 address[2] as third_values -- address中的第三个数据from temp.user_address_temp;
结果如下:
说明:由于“可可”和“丸子”的地址中只有两个值,故取地址中的第三个位置的值时为空。
(2)map:
MAP是一组键-值对,key—value。
例如:字段tmp的数据类型为字典map,map('A', 1, 'B', 2)在表中的数据{'A':1, 'B':2}可以通过访问key来获取对应的value的值,tmp['A']的值为1。
语法:
map<primitive_type, data_type>
说明:
1)通过key可以访问到value;
2)key不能重复,相同的key会相互覆盖,value可以有相同的值;
3)primitive_type表示键的数据类型,data_type表示值的数据类型。
案例:获取字典map类型字段中value的值。
一、生成数据,以便用代码实现:
1、创建表:
create table temp.user_score_temp(name string,score map<string,int>)row format delimited fields terminated by '\t'collection items terminated by ','map keys terminated by ':';
说明:
1)collection items terminated by ',' 指定map集合中每个元素之间的分隔符,一组key-value;
2)map keys terminated by ':' 指定每一个元素中key和value之间的分隔符。
2、插入数据,以便校验结果:
insert into table temp.user_score_tempselect '小希', MAP('数学', 89, '英语', 92)union allselect '可可', MAP('语文', 79, '英语', 82)union allselect '丸子', MAP('数学', 79, '英语', 68, '化学', 82);
3、查看表中的数据:
select * from temp.user_score_temp;
二、查看结果,获取字典map类型字段中value的值,具体如下:
方法:可以通过取字典map类型字段的key来获取value的值。
这里分别获取字典类型字段score中的数学与英语的成绩数据:
代码如下:
select name, score['数学'] as math_score,score['英语'] as english_scorefrom temp.user_score_temp;
结果如下:
如果要获取语文、化学成绩,方法一样的,只要改一下score['a']中的a的值就可以了。
(3)struct:
struct是结构体,通过相关的不同类型的数据来描述一个数据对象。
例如:如果字段tmp的数据类型是struct{first string, last string},那么第1个元素可以通过字段tmp.first来获取。
语法:
struct<col_name1 : data_type1 [comment col_comment], col_name2 : data_type2 [comment col_comment], ...>
说明:
1)struct类型的字段,字段中各属性的数据类型可以不同;
2)每个属性所对应列的数据类型是一样的。
案例:获取struct类型字段中的元素。
一、生成数据,以便用代码实现:
1、创建表:
create table temp.stu_info_temp(id int, info struct<name:string, address:string, age:int>)row format delimited fields terminated by '\t'collection items terminated by ',';
说明:collection items terminated by ',' 指定struct集合中每个元素之间的分隔符。
2、插入数据,以便校验结果:
-- 方法1:使用insert into方法插入数据insert into table temp.stu_info_tempselect 1001, named_struct('name', '小希', 'address', '南京', 'age', 22)union allselect 1002, named_struct('name', '丸子', 'address', '杭州', 'age', 20)union allselect 1003, named_struct('name', '可可', 'address', '上海', 'age', 21);-- 方法2:使用load data加载数据准备数据文件 struct.txt:id info1001 小希,南京,221002 丸子,杭州,201003 可可,上海,21加载数据:load data local inpath '/root/struct.txt' into table stu_info_temp;
注:这里插入数据的时候用的是named_struct,如果使用struct会导致和之前的字段中定义的属性名无法对应。
3、查看表中的数据:
select * from temp.stu_info_temp;
二、查看结果,获取struct类型字段中的元素,通过.符号方法,具体如下:
方法:可以通过.符号方法访问元素。
这里分别获取info中的姓名、地址和年龄的数据:
代码如下:
select id, info.name as name, info.address as address, info.age as age from temp.stu_info_temp;
结果如下:
关于复杂数据类型这块就介绍这么多了,文章中给出了语法解释和使用方法,也可以参考相应的案例进行学习。后面我会对复杂数据类型中数据的转换相关的函数进行介绍,以便大家可以更好的进行数据的获取和清洗,开展数据分析工作,敬请期待呀。
寄语:
我爱生活,喜欢记录生活中的点滴;
我爱向日葵,喜欢看着她朝着太阳微笑的样子,甚是可爱温暖。
标签: #hive元数据表名