创建数据库
```sql
CREATE DATABASE IF NOT EXISTS mydb;
```
这条语句会创建一个名为 `mydb` 的数据库,如果数据库已存在,则不会执行任何操作。
修改数据库
Hive 不直接支持修改数据库的名称。但你可以通过以下步骤间接实现:
1. 创建一个新数据库。
2. 将所有表从旧数据库移动到新数据库。
3. 删除旧数据库。
例如,要将数据库 `mydb` 的名称改为 `newdb`,可以这样做:
```sql
CREATE DATABASE IF NOT EXISTS newdb;
ALTER TABLE mydb.mytable1 RENAME TO newdb.mytable1;
-- 对mydb中的每个表重复上述语句
DROP DATABASE IF EXISTS mydb;
```
删除数据库
```sql
DROP DATABASE IF EXISTS mydb;
```
这条语句会删除名为 `mydb` 的数据库,如果数据库不存在,则不会执行任何操作。
创建表
```sql
CREATE TABLE IF NOT EXISTS mydb.mytable (
id INT,
name STRING,
age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
```
这条语句在 `mydb` 数据库中创建一个名为 `mytable` 的表,表中有三个字段:`id`、`name` 和 `age`。数据以文本格式存储,字段之间用逗号分隔,行之间用换行符分隔。
修改表
添加列
```sql
ALTER TABLE mydb.mytable ADD COLUMNS (new_col INT);
```
这条语句在 `mytable` 表中添加一个名为 `new_col` 的列。
修改列
Hive 不支持直接修改列名,但可以通过以下步骤间接实现:
1. 创建一个新表,包含所需的修改。
2. 将旧表的数据插入到新表中。
3. 删除旧表。
4. 将新表重命名为旧表的名称。
例如,要将 `mytable` 表中的 `age` 列重命名为 `years_old`,可以这样做:
```sql
CREATE TABLE mydb.mytable_new (
id INT,
name STRING,
years_old INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
INSERT INTO TABLE mydb.mytable_new SELECT id, name, age FROM mydb.mytable;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable_new RENAME TO mydb.mytable;
```
删除列
Hive 不支持直接删除列。但可以通过创建一个不包含目标列的新表,然后将数据从旧表复制到新表来实现。
```sql
CREATE TABLE mydb.mytable_new (
id INT,
name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
INSERT INTO TABLE mydb.mytable_new SELECT id, name FROM mydb.mytable;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable_new RENAME TO mydb.mytable;
```
创建分区
创建表时同时指定分区字段:
```sql
CREATE TABLE IF NOT EXISTS mydb.mytable (
id INT,
name STRING,
age INT
)
PARTITIONED BY (country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
```
在这个例子中,`country` 是一个分区字段,表中的数据将根据 `country` 字段的值存储在不同的目录中。
添加分区
如果表已经存在,可以添加新的分区:
```sql
ALTER TABLE mydb.mytable ADD PARTITION (country='USA');
```
这条语句将为 `mytable` 表添加一个名为 `USA` 的分区。
修改分区
Hive 不支持直接修改已存在的分区值。如果需要修改分区值,通常的做法是先加载数据到新的分区,然后删除旧的分区。
### 删除分区
删除一个已有的分区:
```sql
ALTER TABLE mydb.mytable DROP PARTITION (country='USA');
```
这条语句会删除 `mytable` 表中名为 `USA` 的分区及其包含的所有数据。
创建桶
创建表时同时指定桶化字段:
```sql
CREATE TABLE IF NOT EXISTS mydb.mytable (
id INT,
name STRING,
age INT
)
CLUSTERED BY (id) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
```
在这个例子中,表根据 `id` 字段的哈希值将数据分布到 4 个桶中。
修改桶
Hive 不支持直接修改桶的数量。如果需要修改桶的数量,通常的做法是创建一个新表,指定新的桶数量,然后将数据从旧表复制到新表。
删除桶
Hive 不支持直接删除单个桶。如果要删除桶化数据,通常需要删除整个表或者通过创建一个没有桶的新表,然后将不需要的桶的数据过滤掉后插入到新表中。