Hive数据库基本操作
Hive 是基于 Hadoop 的开源数据仓库工具,它提供了类似于 SQL 的 HQL 语句作为数据访问接口。本文将介绍 Hive 数据库的基本操作,包括数据库的创建、删除,以及表的创建、数据导入和查询等操作。
创建数据库
在 Hive 中,可以使用以下语法创建数据库:
CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
创建一个带有属性的数据库示例:
create database testdb WITH DBPROPERTIES ('creator' = 'tp', 'date' = '2024-06-12');
显示创建语句和所有数据库:
show create database testdb;
show databases;
删除数据库
删除数据库的语法如下:
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
RESTRICT
:严格模式,若数据库不为空,则会删除失败,默认为该模式。CASCADE
:级联模式,若数据库不为空,则会将库中的表一并删除。
Hive表操作
建表语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path];
表分类
-
内部表:删除时,文件系统上的数据和元数据都会被删除。
CREATE TABLE inner_test(word string, num int);
-
外部表:使用
EXTERNAL
关键字创建,删除时,只删除元数据,不删除数据。CREATE EXTERNAL TABLE book(id int, name string) PARTITIONED BY (country string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
分区表
分区表可以提高查询效率,防止全表扫描。每个分区对应一个目录。
CREATE EXTERNAL TABLE book
PARTITIONED BY (country string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
添加分区:
alter table book add partition(country='cn');
分桶表
桶是比表或分区更细粒度的数据范围划分。分桶表可以提高查询效率。
CREATE TABLE emp_bucket(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)CLUSTERED BY(deptno) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
导入数据到表中
-
追加数据到表:
load data local inpath '/root/data/emp.txt' into table emp;
-
覆盖表中数据:
load data local inpath '/root/data/emp.txt' overwrite into table emp;
分组查询
分组查询可以对数据进行汇总统计。
select deptno, avg(sal) from emp group by deptno;
结语
Hive 提供了丰富的数据操作功能,包括数据库和表的创建、数据的导入导出,以及复杂的查询操作等。掌握这些基本操作对于大数据分析至关重要。