千家信息网

Hive中有哪些数据类型

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家分享的是有关Hive中有哪些数据类型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、Hive 数据类型1.1、基本数据类型对于Hive的String类型相当
千家信息网最后更新 2025年12月02日Hive中有哪些数据类型

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

1、Hive 数据类型

1.1、基本数据类型

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

1.2 、集合数据类型

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.txtkinglong,ZYL_WJM,xiao chen:2_xiaoxiao chen:1,wan guo cheng_chang sha_kinglong2333@163.comwujiaoxin,LWH_WQ,xiao wu:3_xiaoxiao wu:2,kai fu_changsha_233333@163.com注意:MAP,STRUCT和ARRAY里的元素间关系都可以用同一个字符表示,这里用"_"。
//3、Hive上创建测试表testcreate table test(name string,friends array,children map,address struct)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 testwhere name="kinglong";OK_c0     _c1     cityWJM    2      chang shaTime 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。

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中有哪些数据类型"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0