当前位置:   article > 正文

hive-数据导入导出(超级详细)_hive导出数据文件

hive导出数据文件

N.1 数据导入

N.1.1 load导入

1)load是本地导入或hdfs导入到hive。

数据操纵语言(Data Manipulation Language, DML)

2)语法:

hive (default)> load data [local] inpath '本地文件路径' [overwrite] into table 表名 [partition(1级分区字段=值[,2级分区字段=值]...)] ;

注释:

(1)load data:表示加载数据

(2)local:表示从本地加载数据到复制到hive表;否则从HDFS加载数据移动到到hive表

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据 (比如分区下有多个文件,如果覆盖,原有的文件都会删除,因为被覆盖),否则表示追加。

(5)into table:表示加载到哪张表

(6)partition:表示上传到指定分区

N.1.2 Insert导入

1)Insert 是查询结果导入hive旧表。一般使用在静态分区(需要具体指定)

2)基本插入数据

(目前发现hive插入数据不能指定单个字段插入, 而且要一条的数据插入,插入的字段不能大写要小写)

hive (default)> insert into table  表名 [partition(1级分区字段=值[,2级分区字段=值]) values(a,b,...)] ;

3)单张表查询模式插入

hive (default)> insert overwrite into table 表名1 [partition(1级分区字段=值[,2级分区字段=值])] select * from 表名2 [where 分区字段=值];

注意:overwrite是必要的,不可少。

4)多张表查询模式插入

注释:从表3查询出来的结果给表1和表2做为数据插入,其中表1和表2可以是临时要创建的新字段,也可以是旧字段,当然3个表也可以是相同。

注意:overwrite是必要的,不可少。

hive (default)> from 表名3

insert overwrite table 表名1 [partition(新/旧分区字段=值[,...])]

select id, name where 分区字段=值[ and ...]

insert overwrite table 表名2 [partition(新/旧分区字段=值[,...])]

select id, name [where 分区字段=值[ and ...]]

N.1.3 As Select导入

1)As Select是查询结果导入到hive新表。

hive (default)>create table [ if not exists ] 表名 [ as select 列名 from 查询表名 ]

注意:不支持创建外部表,不能使用external

N.1.4 Location导入

1)创建hive表时通过Location指定加载数据路径。

2)创建表,并指定在hdfs上的位置

hive (default)>create [ external ] table [ if not exists ] 表名

[ (列名 类型 [comment '注释'], ...) ]

[ location /路径/表名 ]

而hdfs中create的表名在hdfs是看不到的,只有 location 的表名可以看到,虽然上下的两个表名可以不一致,但是一般使用一样容易区分,这样就该表下如果有数据就可以进行访问。

N.1.5 Import导入

1)import导入是不通过查询从一个hive旧表导入到另外一个hive旧表的方法。

2)注意:先用export导出到中间目录(导出会附带有一个元数据文件),然后中间目录再import数据导入。

hive (default)> export table 表名1 to '中间目录'; --中间目录自定义

hive (default)> import table 表名2 from '中间目录';

3)这里到导入不是分区表,如果要是用分区表就要加 partition

4)注释: 表名1的数据要导入给表名2 ,表的结构是要相同的,内部表对内部表,外部表对外部表,且字段结构个数都要相同。

N.2 数据导出

N.2.1 Insert导出

1)将查询的结果导出到本地,数据之间无间隔(无分隔的话,在本地查看文件是数据堆砌在一起的)

没有路径的话会自动创建路径。这里的overerite都是必有的,不可以缺少。

hive (default)> insert overwrite local directory '本地路径' select * from 表名;

2)将查询的结果格式化导出到本地,数据之间"\t"间隔

(无分隔的话,在本地查看文件是数据堆砌 在hive执行select的结果一样)

hive (default)> insert overwrite local directory '本地路径'

row format delimited fields terminated by '分隔符'

select * from 表名;

3)将查询的结果导出到HDFS上(没有local)

注:虽然同是HDFS,但不是copy操作,它是移动操作

hive (default)> insert overwrite directory 'hdsf路径''

              row format delimited fields terminated by '分隔符'

              select * from student;

N.2.2 Hadoop命令导出

hive (default)> dfs -get hdfs路径 本地路径;

N.2.3 HiveShell命令导出

基本语法:(hive -f/-e 执行语句或者脚本 > file(自己创建))

“-e”不进入hive的交互窗口执行sql语句,>表示追加。

[itstar@bigdata111hive]$ hive -e 'select * from default.student;' > 本地路径;

N.2.4 Export导出

hive (default)> export table 表名 to 'hdfs路径';

N.2.5 Sqoop导出

(后续讲)

N.3 清除表中数据

注意:Truncate只能删除管理表即内部表的表中数据,不能删除外部表中数据

hive (default)> truncate table 表名;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/942394
推荐阅读
相关标签
  

闽ICP备14008679号