Hive 数据类型
Hive 是一个基于 Hadoop 的数据仓库工具,它提供了一个 SQL 接口来查询和分析大规模的数据集。在 Hive 中,数据类型是非常重要的,因为它决定了数据如何存储和处理。
本文将介绍 Hive 支持的数据类型,并提供相关的代码示例。
一、Hive 基本数据类型
Hive 支持多种基本数据类型,包括整数、浮点数、字符串和布尔值等。下面是一些常用的基本数据类型:
- TINYINT: 一个字节大小的有符号整数,取值范围为 -128 到 127。
- SMALLINT: 二个字节大小的有符号整数,取值范围为 -32768 到 32767。
- INT: 四个字节大小的有符号整数,取值范围为 -2147483648 到 2147483647。
- BIGINT: 八个字节大小的有符号整数,取值范围为 -9223372036854775808 到 9223372036854775807。
- BOOLEAN: 一个布尔值,只能取 true 或 false。
- FLOAT: 单精度浮点数,占用四个字节。
- DOUBLE: 双精度浮点数,占用八个字节。
- STRING: 字符串类型,可以存储任意长度的字符数据。
- TIMESTAMP: 时间戳类型,表示日期和时间的组合。
- DATE: 日期类型,表示年、月、日。
下面是一个创建表并插入数据的示例:
```sql
CREATE TABLE students (
id INT,
name STRING,
age INT,
gender STRING,
gpa FLOAT
);
INSERT INTO students VALUES (1, 'Alice', 20, 'Female', 3.8);
INSERT INTO students VALUES (2, 'Bob', 22, 'Male', 3.6);
INSERT INTO students VALUES (3, 'Charlie', 21, 'Male', 3.4);
INSERT INTO students VALUES (4, 'Diana', 22, 'Female', 3.9);
## 二、Hive 复杂数据类型
除了基本数据类型,Hive 还支持一些复杂的数据类型,包括数组、结构体和映射等。下面是一些常用的复杂数据类型:
- ARRAY: 数组类型,存储相同类型的数据集合。
- STRUCT: 结构体类型,存储不同类型的字段和值。
- MAP: 映射类型,存储键值对。
下面是一个使用复杂数据类型的示例:
```markdown
```sql
CREATE TABLE employees (
id INT,
name STRING,
address STRUCT<street:STRING, city:STRING, state:STRING>,
skills ARRAY<STRING>,
salary MAP<STRING, FLOAT>
);
INSERT INTO employees VALUES (1, 'Alice', named_struct('street', '123 Main St', 'city', 'New York', 'state', 'NY'), array('Java', 'Python', 'SQL'), map('2019', 50000.0, '2020', 55000.0));
INSERT INTO employees VALUES (2, 'Bob', named_struct('street', '456 Elm St', 'city', 'San Francisco', 'state', 'CA'), array('C++', 'JavaScript', 'HTML'), map('2019', 60000.0, '2020', 65000.0));
INSERT INTO employees VALUES (3, 'Charlie', named_struct('street', '789 Oak St', 'city', 'Chicago', 'state', 'IL'), array('Scala', 'R', 'Hadoop'), map('2019', 70000.0, '2020', 75000.0));
## 三、Hive 自定义数据类型
除了内置的数据类型,Hive 还支持自定义数据类型。通过自定义数据类型,我们可以根据特定的需求定义自己的数据类型。下面是一个使用自定义数据类型的示例:
```markdown
```sql
CREATE TYPE my_type AS STRUCT<
name: STRING,
age: INT
>;
CREATE TABLE my_table (
id INT,
info my_type
);
INSERT INTO my_table VALUES (1, named_struct('name', 'Alice', 'age', 20));
INSERT INTO my_table VALUES (2, named_struct('name', 'Bob', 'age', 22));
INSERT INTO my_table VALUES (3, named_struct('name', 'Charlie', 'age', 21));
## 四、总结
在 Hive