数据仓库及应用——Hive DDL操作

创建数据库

```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 不支持直接删除单个桶。如果要删除桶化数据,通常需要删除整个表或者通过创建一个没有桶的新表,然后将不需要的桶的数据过滤掉后插入到新表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值