HiveQL数据库

Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间,使用数据库可以表明表命名冲突。
如果用户没有显式指定数据库,那么将会使用默认的数据库default。

1 创建数据库

创建一个数据库与SQL语言一样

CREATE DATABASE test;

创建数据库
有时候为了避免数据库已经存在,而又创建一个同名数据库引发错误,我们可以使用下面的语句

CREATE DATABASE IF NOT EXISTS test;

通常我们创建一个新的数据库,Hadoop会在/user/hive/warehouse/创建一个/user/hive/warehouse/test.db的目录,接下来我们存储的数据都会存放在这个目录下。
数据库存储位置
当然我们也可以自己来指定这个目录,这个目录位于Hadoop上,会自动创建。

CREATE DATABASE testA
LOCATION '/testA';

另设置数据库存储位置
我们还可以在创建数据库的时候为这个数据库增加要给描述信息

CREATE DATABASE testB
COMMENT 'test for database';

除了描述信息,还可以增加相关的键-值对属性信息

CREATE DATABASE testC
WITH DBPROPERTIES ('creator' = 'JinbaoSite', 'data' = '2018-05-07');

增加元信息

2 查看所有数据库

查看数据库的命令为

SHOW DATABASES;

如果数据库太多,使用上面的语句会显示全部的数据库,我们可以正则表达式来筛选出需要的数据库

SHOW DATABASES LIKE 't.*';

查看所有数据库

3 查看数据库具体信息

我们可以使用下面语句来查看数据库的具体信息

DESCRIBE DATABASE testA;

还可以增加EXTENDED来查看更加具体的信息,比如我们之前添加的元信息。

DESCRIBE DATABASE EXTENDED testB;
DESCRIBE DATABASE EXTENDED testC;

查看数据库具体信息

4 设置当前工作数据库

USE命令用于将数据设置为用户当前的工作数据库

USE test;

不过我们使用这个USE并没有什么感觉,因为它并不会显示在哪个数据库下,也无法查看当前是哪个数据库。但是我们可以反复使用USE,这并不会进行嵌套。
我们也可以通过设置

set hive.cli.print.current.db=true;

显式展示当前的数据库。
设置当前工作数据库

5 删除数据库

用户可以删除数据库

DROP DATABASE testB;
DROP DATABASE IF EXISTS testC;

使用IF EXISTS可以避免因数据库不存在而报出警告信息。
删除数据库
删除testB和testC都会删除其在Hadoop上的存储路径,但是删除testA并不会
删除后Hadoop路径
通常情况下Hive是不允许用户删除一个包含表的数据库,用户需要先删除数据库中的表,然后再删除数据库,但是也可以在后面增加CASCADE使Hive自行先删除数据库中的表

DROP DATABASE IF EXISTS testD CASCADE;

删除含表的数据库

6 数据库增加键-值对属性信息

数据库的元数据一般都是不可更改的,但是我们可以增加相关的键-值对属性信息

ALTER DATABASE test SET DBPROPERTIES('edited-by' = 'dongjinbao')

增加元数据

### HiveQL 使用指南和语法示例 #### 1. HiveQL 基础概念 HiveQL 是一种类似于 SQL 的查询语言,专为大规模数据分析而设计。它允许用户通过简单的 SQL 风格语句来查询、汇总和分析存储在分布式文件系统上的数据[^1]。 #### 2. 创建数据库与表结构 以下是创建数据库和表的基本语法: ```sql -- 创建数据库 CREATE DATABASE IF NOT EXISTS my_database; -- 切换至指定数据库 USE my_database; -- 创建外部表 (External Table) CREATE EXTERNAL TABLE IF NOT EXISTS employees ( id INT, name STRING, salary FLOAT, department STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/path/to/data'; ``` 此代码片段展示了如何定义一个名为 `employees` 的外部表,并指定了字段分隔符以及数据存储路径[^2]。 #### 3. 数据加载与查询 向 Hive 表中加载数据并执行基础查询的操作如下所示: ```sql -- 加载本地文件到表中 LOAD DATA LOCAL INPATH '/local/path/employee_data.csv' INTO TABLE employees; -- 查询员工工资大于等于5000的记录 SELECT * FROM employees WHERE salary >= 5000; ``` 这里演示了从本地磁盘上传 CSV 文件到 Hive 中的方法,同时也给出了筛选条件的一个简单例子[^2]。 #### 4. 复杂查询操作 对于复杂的业务逻辑,可以通过 JOIN 和 GROUP BY 来实现跨表关联计算或者聚合统计等功能: ```sql -- 连接两个表格获取部门名称对应的平均薪资水平 SELECT e.department, AVG(e.salary) as avg_salary FROM employees e JOIN departments d ON e.department = d.dept_name GROUP BY e.department ORDER BY avg_salary DESC; ``` 上述脚本实现了基于部门维度求取每位成员所属单位内的薪酬均值排序展示过程。 #### 5. 特殊特性支持 除了常规的关系型数据库功能外,HiveQL 提供了一些额外的支持选项比如分区(partitioning),这有助于提高查询效率;还有桶(bucketing), 它能进一步优化抽样性能等问题解决途径: ```sql -- 创建带分区的内部表 CREATE TABLE sales ( order_id BIGINT, customer_id STRING, product STRING, amount DOUBLE ) PARTITIONED BY (year INT, month INT); -- 插入带有特定年份月份的数据 INSERT INTO TABLE sales PARTITION(year=2023,month=7) VALUES(1,'CUST_001','Laptop',999); ``` 以上部分说明了当面对时间序列类型的大规模历史积累资料管理时所采用的技术手段之一——即利用 partition 功能降低扫描范围从而加快检索速度的效果体现方式[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值