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,很耗性能,而且会产生一些小文件。