hive的插入操作

1.insert 语法格式为:
基本的插入语法:
INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement
insert overwrite table test_insert select * from test_table;

对多个表进行插入操作:
FROM fromstatte
INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1
INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2

from test_table                     
insert overwrite table test_insert1 
select key
insert overwrite table test_insert2
select value;

insert的时候,from子句即可以放在select 子句后面,也可以放在 insert子句前面。
hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。

2.通过查询将数据保存到filesystem
INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....

导入数据到本地目录:
insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1;
产生的文件会覆盖指定目录中的其他文件,即将目录中已经存在的文件进行删除。

导出数据到HDFS中:
insert overwrite directory '/user/zhangxin/export_test' select value from test_table;

同一个查询结果可以同时插入到多个表或者多个目录中:
from test_insert1
insert overwrite local directory '/home/zhangxin/hive' select * 
insert overwrite directory '/user/zhangxin/export_test' select value;
### Hive 插入数据语法示例 在Hive插入数据的操作可以通过多种方式进行,以下是一些常见的语法和示例[^1]。 #### 1. 使用 `INSERT INTO` 插入数据 当需要向现有的表中追加数据时,可以使用 `INSERT INTO` 语句。例如: ```sql INSERT INTO TABLE student (id, name, score) VALUES (1, 'Alice', 95); ``` 需要注意的是,Hive不直接支持单行或多行的 `VALUES` 插入方式。通常会通过从另一个查询结果中插入数据来实现[^2]。 #### 2. 使用 `INSERT OVERWRITE` 替换数据 如果希望覆盖目标表中的现有数据,则可以使用 `INSERT OVERWRITE` 语句。例如: ```sql INSERT OVERWRITE TABLE student SELECT * FROM temp_student WHERE score > 90; ``` 此语句将覆盖目标表 `student` 中的所有数据,并用来自 `temp_student` 表中符合条件的数据替换。 #### 3. 使用 `LOAD DATA` 加载本地文件 除了通过SQL语句插入数据外,还可以使用 `LOAD DATA` 将本地文件或HDFS上的文件加载到Hive表中。例如: ```sql LOAD DATA LOCAL INPATH '/path/to/local/file.csv' INTO TABLE student; ``` 这条语句将指定路径下的文件内容加载到表 `student` 中。注意,`LOCAL` 关键字表示文件位于本地文件系统上,而非HDFS[^2]。 #### 4. 使用 `CASE WHEN` 和 `INSTR` 处理复杂条件 如果需要根据某些条件插入特定值,可以结合 `CASE WHEN` 和 `INSTR` 函数来实现复杂的逻辑。例如: ```sql INSERT INTO TABLE subject_category SELECT id, CASE WHEN INSTR(name, '语文') > 0 THEN 'Chinese' WHEN INSTR(name, '数学') > 0 THEN 'Math' WHEN INSTR(name, '英语') > 0 THEN 'English' ELSE 'Other' END AS category FROM subjects; ``` 上述语句中,`INSTR` 函数用于查找字符串中子串的位置,从而实现类似 `LIKE` 的功能[^3]。 ### 注意事项 - 在大规模数据插入过程中,可能会产生大量的小文件,这会对Hadoop集群的性能造成影响。为了解决这个问题,可以调整Hive配置参数,如 `hive.exec.dynamic.partition.mode` 和 `hive.merge.smallfiles.avgsize` 等[^2]。 - 确保插入数据时,目标表的字段类型与数据类型匹配,否则可能导致插入失败或数据丢失。 ### 示例总结 以上展示了如何通过不同的方法在Hive插入数据,包括使用SQL语句、加载文件以及处理复杂条件等场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值