Hive DML之加载和导出数据

1、DML官网:LanguageManual DML - Apache Hive - Apache Software Foundation

 

2、表创建好了,把txt数据加载导入表中

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

(1)LOCAL: 有的话,指的是Linux上的路径。无的话,指的是HDFS上的路径。

(2)OVERWRITE:有的话,指数据覆盖。无的话,指的是数据追加。

(3)注意:从HDFS路径导入数据的话,在HDFS中的文件会消失。

hive> use testzhang_db;
OK
Time taken: 0.019 seconds
hive> LOAD DATA INPATH 'hdfs://hadoop000:8020/data/emp.txt' INTO TABLE emp;
hive> select * from emp;

(4)带OVERWRITE的话,会删除所有原始数据,再覆盖数据。

hive> LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp;

 

3、插入数据

(1)通过查询语句,将所有内容写入emp1中。(临时表)

hive (testzhang_db)> create table emp1 as select * from emp;
hive (testzhang_db)> select * from emp1;

(2)通过查询语句,将指定内容写入emp2中。(临时表)

hive (testzhang_db)> create table emp2 as select empno,ename,job,deptno from emp;
hive (testzhang_db)> select * from emp2;

(3)hive的速度较慢,所以只适合离线处理

 

4、将查询结果写入一个本地文件系统

(1)大小写没有关系

(2)标准格式

Standard syntax:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
  SELECT ... FROM ...

(3)示例

hive> use testzhang_db;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/hive/'
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    > select empno,ename,sal,deptno from emp;
[hadoop@hadoop000 ~]$ cd /tmp/hive/
[hadoop@hadoop000 hive]$ ls
000000_0
[hadoop@hadoop000 hive]$ more 000000_0

(4)写入HDFS也是可以的,只要把local去掉。

 

5、注意,Hive不推荐使用Inserting from SQL、Update、Delete,很耗性能,而且会产生一些小文件。

 

posted @ 2021-08-26 15:38  酱汁怪兽  阅读(61)  评论(0编辑  收藏  举报