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;
查看结果