头歌hive表ddl操作二
时间: 2025-03-20 22:05:58 浏览: 139
### Hive 表 DDL 操作教程
#### 1. 数据库操作
在Hive中,可以执行多种数据库级别的DDL操作。以下是常见的数据库操作命令:
- **创建数据库**
使用 `CREATE DATABASE` 命令创建一个新的数据库,并可附加条件如检查是否存在以及添加注释或属性[^5]。
```sql
CREATE DATABASE IF NOT EXISTS mydb COMMENT 'This is a test database';
```
- **查看数据库详情**
可以使用 `DESCRIBE DATABASE EXTENDED` 查看数据库的详细信息,包括路径和其他元数据[^1]。
- **删除数据库**
删除数据库时需注意是否强制删除关联表,默认情况下会提示错误以防误删。
```sql
DROP DATABASE IF EXISTS mydb CASCADE;
```
#### 2. 表的操作
##### 创建表
Hive支持两种类型的表——管理表(内部表)和外部表。两者的区别在于数据文件的存储方式及其生命周期管理。
- **创建管理表**
管理表中的数据由Hive完全控制,当删除表时其对应的数据也会被清除。
```sql
CREATE TABLE managed_table (id INT, name STRING);
```
- **创建外部表**
外部表指向已存在于HDFS上的数据,在这种模式下即使删除表也不会影响底层数据文件。
```sql
CREATE EXTERNAL TABLE external_table (id INT, name STRING) LOCATION '/path/to/data/';
ALTER TABLE external_table SET TBLPROPERTIES ('EXTERNAL'='TRUE');
```
- **字段类型与分隔符设定**
定义表结构的同时还可以指定字段间使用的分隔符。
```sql
CREATE TABLE delimited_table (
id INT,
name STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
```
- **基于查询结果创建新表**
利用子查询的结果快速构建一张新的表格。
```sql
CREATE TABLE new_table AS SELECT * FROM existing_table WHERE condition;
```
- **复制现有表结构而不导入数据**
如果仅想拷贝架构而无需实际迁移任何记录,则采用如下语句。
```sql
CREATE TABLE like_table LIKE original_table;
```
##### 修改表
随着业务需求的变化可能需要调整已有表的设计方案。
- **更改表名**
对于简单更名情况可以直接应用ALTER指令完成重命名过程。
```sql
ALTER TABLE old_name RENAME TO new_name;
```
- **增减列项**
添加额外的新字段或者更新既有字段定义均可以通过此方法实现。
```sql
-- Add column example
ALTER TABLE table_name ADD COLUMNS (new_column STRING);
-- Change column type or position
ALTER TABLE table_name CHANGE COLUMN col_old_name col_new_name NEW_TYPE;
```
##### 清空及销毁表
有时为了释放资源可能会考虑清理整个表的内容或者是彻底移除该对象本身。
- **清空表内容**
此动作保留原始表结构只去除所有行级资料[^3]。
```sql
TRUNCATE TABLE table_name;
```
- **删除整张表**
需要特别留意的是对于外置型态而言仅仅消除逻辑层面上的信息并不会同步处理物理层面的实际档案。
```sql
DROP TABLE IF EXISTS table_name;
```
#### 3. 特殊特性:分区与分桶
这些高级选项有助于优化大规模数据分析性能表现。
- **分区表**
将大尺寸单体分割成若干个小部分以便加速检索速度。
```sql
CREATE TABLE partitioned_table (
id INT,
value DOUBLE
)
PARTITIONED BY (year INT, month INT);
```
- **分桶表**
提供进一步细化粒度的能力从而达到更好的压缩效果降低I/O消耗成本[^4]。
```sql
CREATE TABLE bucketed_table (
id INT,
name STRING
)
CLUSTERED BY (id) INTO 4 BUCKETS;
```
---
阅读全文
相关推荐

















