hive的数据类型

1. hive的数据类型

Hive的内置数据类型可以分为两大类:(1)、基础数据类型;(2)、复杂数据类型

2. hive基本数据类型

基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。

 

3. hive集合类型

集合类型主要包括:array,map,struct等,hive的特性支持集合类型,这特性是关系型数据库所不支持的,利用好集合类型可以有效提升SQL的查询速率。

3.1 集合类型之array

(1) 先创建一张表

create table t_array(id int,name string,hobby array<string>)

row format delimited

fields terminated by ','

collection items terminated by '-';

 

(2) 准备数据文件 array.txt

 

1,zhangsan,唱歌-跳舞-游泳

2,lisi,打游戏-篮球

 

(3) 加载数据文件到t_array表中

load data local inpath ‘/root/array.txt’ into table t_array;

(4) 查询数据

select id ,name,hobby[0],hobby[1] from t_array

注意array的访问元素和java中是一样的,这里通过索引来访问。

3.2 集合类型之map

(1) 先创建一张表

create table t_map(id int,name string,hobby map<string,string>)

row format delimited

fields terminated by ','

collection items terminated by '-'

map keys terminated by ':' ;

 

(5) 准备数据文件 map.txt

 

1,zhangsan,唱歌:非常喜欢-跳舞:喜欢-游泳:一般般

2,lisi,打游戏:非常喜欢-篮球:不喜欢

 

(6) 加载数据文件到t_map表中

load data local inpath ‘/root/map.txt’ into table t_map;

(7) 查询数据

select id,name,hobby['唱歌'] from t_map;

注意map的访问元素中的valuejava中是一样的,这里通过key来访问。

3.3集合类型之struct

(1) 先创建一张表

create table t_struct(id int,name string,address struct<country:string,city:string>)

row format delimited

fields terminated by ','

collection items terminated by '-';

 

(8) 准备数据文件 struct.txt

 

1,zhangsan,china-beijing

2,lisi,USA-newyork

 

(9) 加载数据文件到t_struct表中

load data local inpath  ‘/root/struct.txt’  into table t_struct;

(10) 查询数据

select id,name,address.country,address.city from t_struct;

总结struct访问元素的方式是通过.符号

### Hive 数据类型概述 Hive 支持多种数据类型,这些数据类型可以分为 **原始数据类型** 和 **复杂数据类型**。以下是详细的分类及其用法: #### 原始数据类型 (Primitive Data Types) 1. **数值类型** - 整数类型:`TINYINT`, `SMALLINT`, `INT`, `BIGINT` 表示不同范围的整数[^2]。 - 小数类型:`FLOAT`, `DOUBLE`, `DECIMAL(precision, scale)` 用于表示浮点数和高精度小数。 2. **字符串类型** - 文本类型:`STRING`, `VARCHAR(length)`, `CHAR(length)` 用于存储字符数据。 3. **日期和时间类型** - 时间戳类型:`TIMESTAMP` 存储精确到毫秒的时间值。 - 日期类型:`DATE` 只存储年月日部分。 4. **布尔类型** - `BOOLEAN` 类型用于逻辑判断,取值为 `TRUE` 或 `FALSE`。 5. **二进制类型** - `BINARY` 用于存储字节序列数据。 --- #### 复杂数据类型 (Complex Data Types) 1. **数组 (ARRAY)** 数组是一种有序集合,允许重复元素。定义方式如下: ```sql ARRAY<element_type> ``` 插入和操作数组的例子: ```sql CREATE TABLE array_example (arr ARRAY<int>); INSERT INTO array_example VALUES (array(1, 2, 3)); SELECT arr FROM array_example; ``` 2. **映射 (MAP)** 映射是一个键值对集合,键必须唯一且不可为空。定义方式如下: ```sql MAP<key_type, value_type> ``` 示例代码: ```sql CREATE TABLE map_example (mymap MAP<string,int>); INSERT INTO map_example VALUES (map('a', 1, 'b', 2)); SELECT mymap['a'] FROM map_example; ``` 3. **结构体 (STRUCT)** 结构体是一组命名字段的组合,类似于对象模型中的类实例。定义方式如下: ```sql STRUCT<col_name : col_type [, ...]> ``` 示例代码: ```sql CREATE TABLE struct_example (mystruct STRUCT<a:int,b:string>); INSERT INTO struct_example VALUES (named_struct('a', 1, 'b', 'test')); SELECT mystruct.a FROM struct_example; ``` 4. **联合类型 (UNIONTYPE)** 联合类型允许多种可能的数据类型共存于同一列中,但在任何时刻只有一种类型有效。定义方式如下: ```sql UNIONTYPE<data_type1, data_type2, ..., data_typen> ``` 创建表并插入数据的示例: ```sql CREATE TABLE union_test ( foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>> ); -- 插入整数类型 INSERT INTO union_test VALUES (0:{1}); -- 插入双精度浮点数类型 INSERT INTO union_test VALUES (1:{1.5}); -- 插入数组类型 INSERT INTO union_test VALUES (2:{"apple", "banana"}); -- 插入结构体类型 INSERT INTO union_test VALUES (3:{'a':1,'b':'hello'}); ``` --- #### 类型转换 Hive 提供两种主要的类型转换机制: 1. **隐式转换** 在某些场景下,Hive 自动完成类型转换,例如在数学运算中将较小的整数类型提升为较大的整数或浮点类型[^3]。 2. **显式转换 (CAST 函数)** 当需要手动控制类型转换时,可使用 `CAST` 函数。语法如下: ```sql CAST(expression AS target_data_type) ``` 示例: ```sql SELECT CAST('123' AS INT); ``` --- ### 总结 Hive数据类型涵盖了常见的原始类型以及复杂的嵌套类型,能够满足多样化的数据分析需求。无论是简单的数值计算还是复杂的嵌套结构处理,Hive 都能提供灵活的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值