Hive DML(数据导入导出)

DML

DML:Data Manipulation Language(数据管理语言)

加载数据到表

语法

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

从本地加载数据

LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' INTO TABLE ruoze_dept;

在这里插入图片描述

使用overwrite加载数据
在加载数据的时候,如果没有加上overwite 关键字的话 会重复 加载
在这里插入图片描述

所以一般在工作中,加载数据的时候一定是要加上overwirte的

LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' OVERWRITE  INTO TABLE ruoze_dept;

在这里插入图片描述

从hdfs上加载数据
从hdfs上加载数据 只需要去掉 local 即可,其他一致的

LOAD DATA INPATH '/data/dept.txt'  OVERWRITE  INTO TABLE ruoze_dept;

查看下hdfs上的文件
在这里插入图片描述

查看hive中数据
在这里插入图片描述

这里需要注意的是如果从hdfs上加载数据,执行第二次的时候,是会有错误的
在这里插入图片描述

错误日志提示文件不存在了,查看hdfs
在这里插入图片描述

果然没有了,这里细想一下可以理解的,因为hive的内部表的元数据信息和数据都是有hive自己管理的,所以我们从hdfs中加载完数据之后,会将hdfs上的目录移动到hive的数据仓库对应的数据库中

在这里插入图片描述

根据查询语句插入数据

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
INSERT OVERWRITE TABLE ruoze_dept_test select deptno ,dname ,loc  from ruoze_dept;

注意 不能插入数据顺序不能错,字段数要一致
在这里插入图片描述

从hive中写出数据

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

执行导出语句

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/data/hive_test'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT empno,ename FROM ruoze_emp;

查看结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40420525/article/details/83383763