【图文详细 】Hive的DML操作中Insert 插入数据

语法结构: 
 
1、插入一条数据: INSERT INTO TABLE table_name VALUES(XX,YY,ZZ); 
 
2、利用查询语句将结果导入新表: INSERT OVERWRITE [INTO] TABLE table_name [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement 
 
3、多重插入 FROM from_statement  INSERT OVERWRITE TABLE table_name1 [PARTITION (partcol1=val1, partcol2=val2 ...)] 

select_statement1  INSERT OVERWRITE TABLE table_name2 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement2] ... 


示列:

4、分区插入 

分区插入有两种,一种是静态分区,另一种是动态分区。如果混合使用静态分区和动态分区, 则静态分区必须出现在动态分区之前。现分别介绍这两种分区插入。 
 静态分区:

A)、创建静态分区表

B)、从查询结果中导入数据

C)、查看插入结果 

动态分区: 

静态分区需要创建非常多的分区,那么用户就需要写非常多的 SQL!Hive 提供了一个动态分 区功能,其可以基于查询参数推断出需要创建的分区名称。 

A)、创建分区表,和创建静态分区表是一样的 
 
B)、参数设置 

注意:动态分区默认情况下是开启的。但是却以默认是”strict”模式执行的,在这种模式 下要求至少有一列分区字段是静态的。这有助于阻止因设计错误导致查询产生大量的分 区。但是此处我们不需要静态分区字段,估将其设为 nonstrict。 

对应还有一些参数可设置:

小技能补充:如果以上参数被更改过,想还原,请使用 reset 命令执行一次即可  

C)、动态数据插入 

注意:查询语句 select 查询出来的动态分区 age 和 zipcode 必须放最后,和分区字段对应, 不然结果会出错 

D)、查看插入结果

select * from student_ptn2 where city=’sa’ and zipcode=’MA’; 

5、CTAS(create table … as select …)

在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将 Hive 的查询 输出结果直接存在一个新的表中是非常方便的,我们称这种情况为 CTAS 
 
展示:CREATE TABLE mytest AS SELECT name, age FROM test; 
 
注意:CTAS 操作是原子的,因此如果 select 查询由于某种原因而失败,新表是不会创建的! 


版权声明:本文为qq_42246689原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。