Hive insert into table 和 insert overwrite table 的区别

本文详细解析了在数据库中,insertinto和insertoverwritetable两种插入方式的差异。insertinto会追加重复数据,而insertoverwritetable则会清空表后插入,确保数据唯一。通过实例说明了它们在实际操作中的应用和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【直接上结论】

insert into table —— 在表后直接插入,不去重

insert overwrite table —— 将原表清空后,再插入数据。


【实际举例】

1、建表:insert_test

CREATE table insert_test as 

SELECT 1 as id

表内数据:1


 2.1、insert插入数据2

insert into table insert_test 

select 2 as id

 表内数据:1,2

 2.2、insert插入数据2

insert into table insert_test 

select 2 as id

 表内数据:1,2,2

即,即使重复,也会继续追加。


 3 insert overwrite 插入数据2

insert overwrite table insert_test 

select 2 as id

 表内数据:2

即清空原表内容,再插入数据。与原表内容重复与否,无关。

### 使用 Hive 进行数据覆盖插入操作 在 Hive 中,`INSERT OVERWRITE TABLE` 命令用于向现有表中插入新记录并替换旧有数据。此命令会删除目标表中的任何已有数据,并写入新的查询结果。 #### 语法结构 基本语法如下: ```sql INSERT OVERWRITE TABLE target_table_name SELECT column_list FROM source_table_name; ``` 为了确保最佳性能,在执行 `INSERT OVERWRITE` 操作时应考虑以下几点建议[^1]: - 将最大的表格放在连接语句最右侧的位置; - 只选择必要的字段以减少 I/O 开销; 下面是一个具体的例子来展示如何使用该命令以及一些优化技巧: 假设有一个名为 `page_view` 的日志表另一个存储用户信息的 `users` 表。现在想要创建一个新的汇总表 `daily_user_activity` 来保存每天活跃用户的统计数据。 ```sql CREATE TABLE IF NOT EXISTS daily_user_activity ( userid STRING, activity_date DATE, count INT ); -- 插入当天活动量统计到每日用户活动中 INSERT OVERWRITE TABLE daily_user_activity SELECT u.id AS userid, pv.date AS activity_date, COUNT(*) AS count FROM users u JOIN page_view pv ON (u.id = pv.userid AND pv.date = '2008-03-03') GROUP BY u.id, pv.date; ``` 这段 SQL 查询首先通过内联接获取指定日期内的页面浏览记录及其对应的用户 ID ,接着按天分组计算每个用户的访问次数最后将这些聚合后的结果存入 `daily_user_activity` 表中。 对于只需要验证键存在性的场景,则可以采用左半连接 (`LEFT SEMI JOIN`) 方式提高效率[^2]: ```sql INSERT OVERWRITE TABLE active_users SELECT DISTINCT u.* FROM users u LEFT SEMI JOIN recent_logins rl ON (rl.user_id = u.id); ``` 这条语句的作用是从 `recent_logins` 表里筛选出最近登录过的那些用户并将它们的信息复制给 `active_users` 表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值