这篇文章给大家分享的是有关Hive中有哪些数据类型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多 少个字符,理论上它可以存储2GB的字符数。
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)
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。
一.创建库: 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]
一 创建表 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中有哪些数据类型”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。