Hive 表的类型
在 Hive 中,有多种类型的表,主要包括:
-
内部表(Managed Table):
- 默认的表类型。创建时,Hive 会在默认的 warehouse 目录中创建一个以表名命名的目录,并将数据存储在该目录下。
- 当删除内部表时,表结构和数据都将被删除。
-
外部表(External Table):
- 创建时,Hive 不会管理数据的存储位置。数据可以存储在 HDFS 中的任何位置。
- 删除外部表时,只删除表结构,而不会删除数据。
-
分区表(Partitioned Table):
- 将表的数据根据某个列的值进行分区,从而提高查询效率。
- 每个分区对应一个子目录。
-
分桶表(Bucketed Table):
- 将数据分成多个桶(文件),并可以在查询时提高性能。
- 通常与分区表结合使用。
创建内部表的步骤
在 Hive 中创建一个表通常遵循以下步骤:
-
准备数据文件:
- 数据文件可以在 Linux 文件系统或 HDFS 中存在。
-
创建表:
- 表的结构需要与数据文件的格式相对应。
-
加载数据:
- 使用
LOAD DATA
命令将数据导入表中。
- 使用
创建表的语法结构
创建表的基本语法如下:
CREATE TABLE 表名 (
列名1 类型,
列名2 类型,
...
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '分隔符';
示例:创建一个学生表(hive的stu数据库)
stu
数据库创建:
CREATE DATABASE IF NOT EXISTS stu;
插入数据之前,需要切换到 stu
数据库:
USE stu;
创建一个学生表:
CREATE TABLE stu (
id INT,
name STRING,
age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
-
说明:
-
ROW FORMAT DELIMITED
指定了行的格式。 -
FIELDS TERMINATED BY ','
指定了列之间的分隔符为逗号。
-
从 HDFS 导入数据
假设本地 Linux 文件系统有一个文件 /opt/datas/stu.txt
,可以使用 hadoop fs -put
命令将其上传到 HDFS。
hadoop fs -put /opt/datas/stu.txt /datas/
然后将数据从 HDFS 导入到表中:
LOAD DATA INPATH '/datas/stu.txt' INTO TABLE stu;
OVERWRITE:
-
语法:
LOAD DATA INPATH '/datas/stu.txt' OVERWRITE INTO TABLE stu;
- 如果表
stu
已经存在数据,执行该命令后,表中的所有现有数据将被删除,并用新的数据替换。 - 这意味着结果表只会包含新加载的
stu.txt
文件中的数据。
- 如果表
从本地Linux导入数据
将数据从本地文件系统导入到表中:
LOAD DATA LOCAL INPATH '/opt/datas/stu.txt' INTO TABLE stu;
查询表的数据
查询表中的数据:
SELECT * FROM stu;
注意事项
- 当你创建
stu
表并加载数据后,HDFS 的warehouse
目录下会生成一个名为stu
的子目录,存储了表的数据文件。 -
/user/hive/warehouse/stu.db/stu
该目录通常包含多个小文件(如从hdfs目录/datas
移动而来的文件/datas/stu.txt
变成/user/hive/warehouse/stu.db/stu/stu.txt
),这些文件存储的是实际的数据。