大数据---26.Hive表中数据导入导出

1.建表时直接导入:

如果你的数据已经在HDFS上存在,已经为结构化数据,并且数据所在的HDFS路径不需要维护,那么可以直接在建表的时候使用location指定数据所在的HDFS路径即可

CREATE [EXTERNAL] TABLE t_lxw1234 (
day STRING,
url STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ’ ’
stored as textfile
location ‘/tmp/aaa.txt/’;

2.使用load,语法结构: [ ]带括号的表示可选择字段

LOAD DATA [LOCAL] INPATH ‘filepath’ [OVERWRITE] INTO
TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 …)]
  各参数说明:
  1 -hive只对导入该表中的数据按照自己的方式 处理,对于错误的数据不管,超出直接丢弃。
  2 - Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。 所以也可以直接hadoop fs -put ./1.txt /user/hive/warehouse/web_log.db/staff/ 将数据直接导入到hive表对应的位置。hive对  导入的数据没有查错的功能,只是按自己的表字段进行匹配,格式匹配不了的默认用Null替代, hive属于读时模式。
  3 - LOCAL关键字, 如果指定了 LOCAL, load 命令会去查找本地文件系统中的 filepath。 如果没有指定 LOCAL 关键字,则根据inpath中的uri查找文件
  4 - OVERWRITE 关键字, 如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的 内容会先被全部被删除 ,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。 如果目标表(分区)已经有  一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。

详细语法结构

1、本地导入(本地导入以后1.txt文件本地还有备份的,且这里是增量表插入(不覆盖))

load data local inpath ‘local_path/file’ into table 表名称 ;
ex: load data local inpath ./1.txt into table staff;

2、HDFS导入(导入完以后hdfs上的1.txt文件就不存在了,且这里是增量表插入(不覆盖))

load data inpath ‘hdfs_path/file’ into table 表名称 ;
ex: load data inpath ‘/user/jerry.txt’ into table jerry;  – 不能少了单引号
load data inpath ‘hdfs://hadoop102:8020/user/jerry.txt’ into table jerry;

3,覆盖导入:本地文件导入,hdfs文件导入加了overwrite参数而已(原有数据会被清除掉 重新插入新数据)

  1. load data local inpath ‘path/file’ overwrite into table 表名称 ; – 从Linux本地系统导入
    ex: load data local inpath ./1.txt ovewrite into table staff;
    2.load data inpath ‘path/file’ overwrite into table 表名称 ;  – 从hdfs上导入
    ex:load data inpath ‘/user/jerry.txt’ overwrite into table jerry;

4、查询导入(其实就是创建新表)

create table track_log_bak as select * from db_web_data.track_log;

5、insert查询结果插入hive中(insert导入必须基于别的表查询导入的)将查询结果插入Hive表

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)]
select_statement1 FROM from_statement

覆盖-overwrite-显示指定-使用频率高
追加-append-默认方式 (用into)
ex: insert into table staff (这里没有as) select * from track_log;
ex: insert overwrite table staff2 select id,name from staff where id<100;

二、从Hive表导出数据方式(也是查询方式导出,跟导入区别insert后面一个是table,一个是directory)

1、hive中数据导出到本地

标准语法 :

INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT … FROM …
例如:insert overwrite local directory “/home/admin/Desktop/1/2”
row format delimited fields terminated by ‘\t’
select * from db_hive_demo.emp ;(row 这一行可以不加)
  注意:会递归创建目录,一定要选择文件夹,否则会覆盖目录,造成数据丢失

2、insert查询结果导出到HDFS

insert overwrite directory ‘hdfs://hadoop102:8020/user/hive/warehouse/emp2/emp2’
select * from emp where empno >7800;

3、Bash shell覆盖追加导出

$ bin/hive -e “select * from staff;” > /home/z/backup.log

4、Sqoop把hive数据导出到外部

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值