温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hive中有哪些数据类型

发布时间:2021-12-10 14:39:43 来源:亿速云 阅读:359 作者:小新 栏目:大数据

这篇文章给大家分享的是有关Hive中有哪些数据类型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、Hive 数据类型

1.1、基本数据类型

Hive中有哪些数据类型

对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多
少个字符,理论上它可以存储2GB的字符数。

1.2 、集合数据类型

Hive中有哪些数据类型

Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的
Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

案例实操:

//1、假设某表有如下一行,我们用JSON格式来表示其数据结构。在Hive下访问的格式为
{
    "name": "kinglong",
    "friends": ["ZYL" , "WJM"],       //列表Array, 
    "children": {                     //键值Map,
        "xiao chen": 2,
        "xiaoxiao chen": 1
    }
    "address": {                     //结构Struct,
        "street": "wan guo cheng",
        "city": "chang sha",
        "email": "kinglong2333@163.com"
    }
}
//2、基于上述数据结构,我们在Hive里创建对应的表,并导入数据。

创建本地测试文件test.txt

kinglong,ZYL_WJM,xiao chen:2_xiaoxiao chen:1,wan guo cheng_chang sha_kinglong2333@163.com
wujiaoxin,LWH_WQ,xiao wu:3_xiaoxiao wu:2,kai fu_changsha_233333@163.com

注意:MAP,STRUCT和ARRAY里的元素间关系都可以用同一个字符表示,这里用“_”。
//3、Hive上创建测试表test

create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string,city:string,email:int>
)
row format delimited fields terminated by ','	-- 指定各字段之间用什么分隔开
collection items terminated by '_'		--集合数据类型每条数据之间用什么分隔开
map keys terminated by ':'			-- map数据类型k,v之间用什么分隔开
lines terminated by '\n';			-- 每条数据之间用什么分隔开(默认就是换行符)
//4、导入文本数据到测试表
hive (default)> load data local inpath '/opt/module/hive/datas/test.txt' into table test;

//5、访问三种集合列里的数据,以下分别是ARRAY,MAP,STRUCT的访问方式
hive (default)> select friends[1],children['xiao chen'],address.city from test
where name="kinglong";
OK
_c0     _c1     city
WJM    2      chang sha
Time taken: 0.076 seconds, Fetched: 1 row(s)

1.3、类型转换

    Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自
动转换为INT类型,但是Hive不会进行反向转化,例如某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,
它会返回错误,除非使用CAST操作。
1)隐式类型转换规则如下
(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。
(3)TINYINT、SMALLINT、INT都可以转换为FLOAT。
(4)BOOLEAN类型不可以转换为任何其它的类型。

2)可以使用CAST操作显示进行数据类型转换
例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返
回空值 NULL。

Hive中有哪些数据类型

2、DDL数据定义

2.1、库的操作

一.创建库:
	CREATE DATABASE [IF NOT EXISTS] 库名
		#IF NOT EXISTS :如果库不存在则创建库。如果库存在则不创建。
		#注意:如果不加该内容。库存在时就会报错
	[COMMENT 库的描述信息]
		#comment用来添加库的描述信息
	[LOCATION hdfs_path]
		#localtion : 指定库在hdfs上的路径(如果不指定则放在默认的路径下-配置文件中配置的路径)
	[WITH DBPROPERTIES (name=value, ...)];
		#WITH DBPROPERTIES : 给库添加属性。
		#注意:name和value都是string
		
二.案例:
	create database if not exists db2
	comment 'this is db2'
	location '/db2.db'
	with dbproperties('version'='1.0');


三.对库的操作

	1.查看所有的库:
		show databases;
		
	2.选库
		use 库名;
		
	3.查看库的信息(extended:可以查看库的属性内容)
		desc database [extended] 库名;
		
	4.修改库(只能修改属性)
		alter database 库名 set dbproperties('name'='value');
		
	5.删库(cascade :如果库为非空必须使用该字段才能删库)
		#if exists :如果库存在则删除。如果不加该字段库不存在则会报错
		drop database [if exists] 库名 [cascade]

2.2、表的操作

一 创建表
	CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名 
		#EXTERNAL :加上该字段该表为外部表。不加则为内部表(管理表)
		#IF NOT EXISTS :如果表不存在则创建表存在则不创建。如果不加该字段表存在则报错
	[(字段名 字段类型 [COMMENT 字段的描述信息], ...)] 
	[COMMENT 表的描述信息] 
	[PARTITIONED BY (字段名 字段类型 [COMMENT 字段描述信息], ...)] 
		#PARTITIONED BY :指定分区字段(分区表)
	[CLUSTERED BY (字段名1, 字段名2, ...) 
		#CLUSTERED BY :指定分桶字段(分桶表)
	[SORTED BY (字段名 [ASC|DESC], ...)] INTO 分桶的数量 BUCKETS] 
		#SORTED BY :在添加数据时按照指定字段进行排序(几乎不用)
	[ROW FORMAT row_format] 
		delimited fields terminated by ',' #指定各字段之间用什么分隔开
		collection items terminated by '_'  #集合数据类型每条数据之间用什么分隔开
		map keys terminated by ':' #map数据类型k,v之间用什么分隔开
		lines terminated by '\n';#每条数据之间用什么分隔开(默认就是换行符)
	[STORED AS 存储的类型] 
		#STORED AS:指定存储文件(表中的数据)的类型。默认是TextFile
	[LOCATION 表的路径]
	[TBLPROPERTIES (name=value, ...)]
		#给表添加属性。注意:name和value都是string
	[AS sql查询语句]
		#将查询的结果创建成一张表
	[LIKE 表名]
		#允许用户复制现有的表(like后面的表)结构,但是不复制数据
		
		
二 创建表案例
	create table if not exists person(
	id int comment 'this is id',
	name string comment 'this is name'
	)
	comment 'this is person'
	row format delimited fields terminated by '\t'
	location '/person'
	tblproperties('version'='1.0');
-----------------------------------------------------
2.1导入数据
	load data [local] inpath '/opt/module/hive/datas/student.txt' into table person;
	#[local] :如果不加local地址为HDFS。如果加了Local地址为本地
-----------------------------------------------------
2.2 like
	create table if not exists person2
	like person;
-----------------------------------------------------
2.3 as
	create table if not exists person3
	as
	select * from person where id < 1010;

-----------------------------------------------------
2.4创建外部表和管理表
	create external table if not exists ext_tbl(
	id int,
	name string
	)
	row format delimited fields terminated by '\t';


	create table if not exists man_tbl(
	id int,
	name string
	)
	row format delimited fields terminated by '\t';

注意:外部表删除表时只会删除元数据。管理表删除表时会元数据和数据会被一同删除。
-----------------------------------------------------

2.5 外部表和管理表相互转换
	alter table 表名 set tblproperties('EXTERNAL'='TRUE/FALSE');
	注意:属性的内容一定要大写。


三 操作表:
	1.查看表信息(formatted :可以查看更详细的内容)
		desc [formatted] 表名;
		
	2.删除表
		drop table 表名;
	
	3.修改表的名字
		alter table 表名 rename to 新表名;
		
	4.更新列名
		ALTER TABLE 表名 CHANGE [COLUMN] 
		旧列名 新列名 列的类型 [COMMENT 列的描述信息] [FIRST|AFTER 列名]
		
	4.更新列的类型
		ALTER TABLE 表名 CHANGE [COLUMN] 
		列名 列名 新的列的类型 [COMMENT 列的描述信息] [FIRST|AFTER 列名]
		注意:修改类型一定要符合隐式转换否则会报错。
		
	5.增加列
	 ALTER TABLE 表名 ADD COLUMNS (字段名 字段类型 [COMMENT 字段描述信息], ...) 
	 
	6.替换列
	 ALTER TABLE 表名 REPLACE COLUMNS (字段名 字段类型 [COMMENT 字段描述信息], ...) 
	 
	 注意:①如果替换的列少于被替换的列,那么按照顺序进行替换。没有被替换的列被直接删除。
		   ②替换列时一定要注意数据类型。(能隐式转换的可以替换否则报错)
	
	
	7、清空表(只能清空管理表--不是删表而是删除数据)
		truncate table 表名;

感谢各位的阅读!关于“Hive中有哪些数据类型”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI