前言
1.hive表删除数据不能使用DELETE FROM table_name 中SQL语句
2.hive表删除数据要分为不同的粒度:table、partition、partition内
最近Kylin服务不稳定,metadata出现了严重丢失,不得不重新计算所有数据。
我们使用hive存储元数据,重新计算数据时,要确保hive中的数据不重复,此时需要删除某个时间段内的元数据,重新加载该时间段数据。
有partition表
1.删除具体partition
ALTER TABLE table_name DROP PARTITION(partiton_name='value')
e.g.
ALTER TABLE wmp_sessions_parquet DROP PARTITION(cst_date='2019-11-18');
2.删除partition内的部分信息(INSERT OVERWRITE TABLE)
INSERT OVERWRITE TABLE table_name PARTITION(dt='2019-11-18') SELECT * FROM source_table_name WHERE dt='2019-11-18';
e.g.
INSERT OVERWRITE TABLE sxl_pageviews_parquet PARTITION(dt) SELECT * FROM sxl_pageviews_json WHERE dt >= '2019-09-01' AND dt < '2019-10-09';
上述方式,会重新把对应的partition信息加载,通过WHERE 来限定需要留下的信息,没有留下的信息就被删除了。
无partition表
INSERT OVERWRITE TABLE dpc_test SELECT * FROM dpc_test WHERE age IS NOT NULL;
FYI: