JobPlus知识库 IT DBA 文章
【Hive】HiveQL:数据操作

本篇主要演示Hive的数据操作,包括向表中装载数据、插入数据、创建表以及导出数据。

一 向表中装载数据

1 语法结构

[sql]

  1. LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]  

2 示例

[sql]

  1. hive> load data local inpath '/home/hadoop/emp/'  
  2.     > into table emp;  
  3. Loading data to table hive.emp  
  4. OK  
  5. Time taken: 0.95 seconds  
  6. hive> select *from emp;  
  7. OK  
  8. emp.id  emp.name  
  9. 1   Alen  
  10. 2   Jane  
  11. 3   Tom  
  12. 4   Peter  
  13. Time taken: 0.252 seconds, Fetched: 4 row(s)  
  14. hive>   

二 通过查询语句向表中插入数据

1 语法结构

[sql] 

  1. INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;  
  2. INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;  
  3.    
  4. Hive extension (multiple inserts):  
  5. FROM from_statement  
  6. INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1  
  7. [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2]  
  8. [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;  
  9. FROM from_statement  
  10. INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1  
  11. [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]  
  12. [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;  
  13.    
  14. Hive extension (dynamic partition inserts):  
  15. INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;  
  16. INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;  

2 示例

[sql] 

  1. hive> create table t_emp(id int , name string);  
  2. OK  
  3. Time taken: 1.611 seconds  
  4. hive> insert overwrite table t_emp  
  5.     > select *from emp;  
  6. hive> select *from t_emp;  
  7. OK  
  8. t_emp.id    t_emp.name  
  9. 1   Alen  
  10. 2   Jane  
  11. 3   Tom  
  12. 4   Peter  
  13. Time taken: 0.296 seconds, Fetched: 4 row(s)  

三 单个查询语句中创建表并加载数据

通过Create Table AS实现:

[sql] 

  1. hive> create table t_emp as  
  2.     > select *from emp;  
  3. hive> select *from t_emp;  
  4. OK  
  5. t_emp.id    t_emp.name  
  6. 1   Alen  
  7. 2   Jane  
  8. 3   Tom  
  9. 4   Peter  
  10. Time taken: 0.311 seconds, Fetched: 4 row(s)  

四 导出数据

1 语法结构

[html]

  1. Standard syntax:  
  2. INSERT OVERWRITE [LOCAL] DIRECTORY directory1  
  3.   [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)  
  4.   SELECT ... FROM ...  
  5.    
  6. Hive extension (multiple inserts):  
  7. FROM from_statement  
  8. INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1  
  9. [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...  
  10.    
  11.     
  12. row_format  
  13.   : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]  
  14.         [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]  
  15.         [NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)  

2 示例

[sql] 

  1. hive> insert overwrite local directory  '/home/hadoop/emp'  
  2.     > select *from emp;  
  3. [hadoop@strong ~]$ vim /home/hadoop/emp/000000_0   
  4. 1^AAlen  
  5. 2^AJane  
  6. 3^ATom  
  7. 4^APeter  

注:数据中的列与列之间的分隔符是^A(ascii码是\00001)。

3 使用Hadoop命令导出

[sql] 

  1. [hadoop@strong ~]$ hadoop fs -copyToLocal /user/hive/warehouse/hive.db/emp/ /home/hadoop/  
  2. [hadoop@strong ~]$ cat emp/*  
  3. 1Alen  
  4. 2Jane  
  5. 3Tom  
  6. 4Peter  

五 插入值到表中

1 语法结构

[sql]

  1. Standard Syntax:  
  2. INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]  
  3.     
  4. Where values_row is:  
  5. ( value [, value ...] )  
  6. where a value is either null or any valid SQL literal  

2 示例

[sql]

  1. hive> insert into emp values(5,'Jack'),(6,'Winter');  

六 修改操作

1 语法结构

[sql] 

  1. Standard Syntax:  
  2. UPDATE tablename SET column = value [, column = value ...] [WHERE expression]  

注:update操作仅仅在支持ACID的表上执行。

七 删除操作

1 语法结构

[sql] 

  1. Standard Syntax:  
  2. DELETE FROM tablename [WHERE expression]  

注:delete操作仅仅在支持ACID的表上执行。

八 合并操作

1 语法结构

[sql] 

  1. Standard Syntax:  
  2. MERGE INTO <target table> AS T USING <source expression/table> AS S  
  3. ON <boolean expression1>  
  4. WHEN MATCHED [AND <boolean expression2>] THEN UPDATE SET <set clause list>  
  5. WHEN MATCHED [AND <boolean expression3>] THEN DELETE  
  6. WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>  

注:merge操作仅仅在支持ACID的表上执行。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
352人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序