“删库跑路”作为一种历史悠久、后果严重的公司资产损坏事故,一旦发生,后果难以估量,轻则业务短时间不可用,重则公司倒闭关门,甚至有人为此坐牢。已经发生的事件历历在目,希望大家引以为戒。
在实际工作中,诸如删除表数据、删除表乃至删除数据库等操作都较为常见,尤其是在测试和发布环境中。作为数据工程师,我们要注意掌握以下 Hive DDL 操作方法,并在生产环境中谨慎执行:
1. 删除数据库
代码语言:javascript复制DROP DATABASE IF EXISTS mydb;
-- 强制删除数据库,级联删除,会递归删除数据库中的所有表及其数据。
DROP DATABASE IF EXISTS mydb CASCADE;
2. 删除表
代码语言:javascript复制DROP TABLE ods.ods_xxx_day;
3. 删除表数据
代码语言:javascript复制-- 清空表-方法1
TRUNCATE TABLE ods.ods_xxx_day;
-- 清空表-方法2
INSERT OVERWRITE TABLE ods.ods_xxx_day
SELECT * FROM ods.ods_xxx_day
WHERE 1=2;
-- 按条件删除部分数据
```sql
INSERT OVERWRITE TABLE ods.ods_xxx_day
SELECT * FROM ods.ods_xxx_day
WHERE id > 1000;
4. 删除分区
删除单个分区:(显示指定,ds 为分区列名)
代码语言:javascript复制ALTER TABLE ods.ods_xxx_day DROP [IF EXISTS] PARTITION (ds='20230920');
删除多个分区:(显示指定)
代码语言:javascript复制ALTER TABLE ods.ods_xxx_day DROP [IF EXISTS] PARTITION (ds='20230920', ds='20230921',...);
5. 批量删除分区
删除指定目录下的所有分区:
代码语言:javascript复制-- 方法1(目录指定)
ALTER TABLE table_name DROP IF EXISTS PARTITIONS path='/data/my_table/dt=20230920';
-- 方法2(范围指定)
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (ds >= '20230901', ds < '20230920')
以上概括了 Hive 中常见的 DDL 操作,请各位务必注意在生产环境中谨慎操作。