摸鱼大数据——Hive表操作——文件数据的导入和导出

数据导入和导出

1、文件数据导入
1.1 直接上传文件
  • window页面上传

需求: 已知emp1.txt文件在windows/mac系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据

use day06;
​
-- 1- 创建Hive表
create table emp1 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';
​
-- 2- 通过浏览器界面将数据上传到HDFS
​
-- 3- 将HDFS上的数据文件加载到Hive中
load data inpath '/emp1_dir' into table emp1;
​
-- 4- 数据验证
select * from emp1;
​
​
-- load数据的特殊演示
-- 1- 建表
create table emp111 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';
​
-- 2- 通过HDFS的shell命令移动/复制数据文件到表的目录下
-- hdfs dfs -cp /user/hive/warehouse/day06.db/emp1/emp1.txt /user/hive/warehouse/day06.db/emp111/emp2.txt
select * from emp111;

  • linux本地put上传

需求: 已知emp2.txt文件在linux系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据

use day06;

-- 1- 创建Hive表
create table emp2 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';

-- 2- 通过命令或者界面将windows上的文件先上传到linux
-- rz

-- 3- 通过命令linux上的文件上传到HDFS,并且上传到表数据所在的目录
-- hdfs dfs -put emp2.txt /user/hive/warehouse/day06.db/emp2
-- hdfs dfs -ls /user/hive/warehouse/day06.db/emp2

-- 4- 验证数据
select * from emp2;

1.2 load加载文件
从hdfs路径把文件移动到表对应存储路径中: load data inpath '文件路径' [overwrite] into table 表名称;
​
从linux本地把文件上传到表对应存储路径中: load data local inpath '文件路径' [overwrite] into table 表名称;

  • load移动HDFS文件

use day06;
​
-- 创建Hive表
-- \t表示的是制表符
create table search_log(
    dt string,
    uid string,
    name string,
    url string
)row format delimited fields terminated by '\t';
​
-- HDFS文件演示
-- 将windows本地文件上传到HDFS的非Hive表所在的目录
load data inpath '/dir/search_log.txt' into table search_log;
select * from search_log;

  • load上传Linux文件

-- Linux本地文件演示
load data local inpath '/home/search_log.txt' into table search_log;
select * from search_log;

load上传Linux文件并且使用overwrite

-- Linux本地文件演示,并且带上overwrite
-- overwrite效果:先清空表中的原有数据,然后是新数据填充
load data local inpath '/home/search_log.txt' overwrite into table search_log;
select * from search_log;

1.3 insert插入数据
从其他表查询数据'追加'插入到当前表中: insert into table 表名 select查询语句;
​
从其他表查询数据'覆盖'插入到当前表中: insert overwrite table 表名 select查询语句;

  • insert追加数据

use day06;
​
-- 创建Hive表
-- \t表示的是制表符
create table search_log_copy(
    dt string,
    uid string,
    name string,
    url string
)row format delimited fields terminated by '\t';
​
select * from search_log_copy;
​
-- 通过insert select 语句加载其他表中的数据到当前表中
insert into table search_log_copy select * from search_log;
​
select * from search_log_copy;

  • insert覆盖数据

-- insert overwrite覆盖数据
insert overwrite table search_log_copy select * from search_log;
​
select * from search_log_copy;

总结:
1- 如果文件就在windows上面,可以通过直接上传文件的方式
2- 如果文件在linux操作系统上面,可以选择直接上传文件或者load加载文件
3- 如果我们是需要从其他表中将数据复制到我自己的表中,可以使用insert插入数据

2、文件数据导出
2.1 直接下载文件
  • web页面下载

需求: 已知search_log.txt文件在HFDS的/user/hive/warehouse/day06.db/search_log路径下,要下载到window系统

  • get命令下载文件

需求: 已知search_log.txt文件在HFDS的/user/hive/warehouse/day06.db/search_log路径下,要下载到linux系统

[root@node1 home]# hdfs dfs -get /user/hive/warehouse/day06.db/search_log/search_log.txt .

2.2 insert导出数据
查询数据导出到hdfs其他路径: insert overwrite directory 'HDFS路径' select语句;
​
查询数据导出到linux本地中: insert overwrite local directory 'Linux路径' select语句;
​
注意:
    1- overwrite会覆盖掉路径中已有的文件,千万注意。推荐指定一个新的空目录
    2- 如果不指定分隔符,导出的文件中使用默认的Hive分隔符\001
​
导出数据指定分隔符添加(以HDFS为例): 
insert overwrite directory '/dir'
row format delimited fields terminated by ','
select * from search_log;

  • insert导出到hdfs

use day06;
​
-- 将Hive表数据导出到HDFS的路径下
-- overwrite:会覆盖指定目录中文件
insert overwrite directory '/dir' select * from search_log;
​
-- 指定分隔符
insert overwrite directory '/dir'
row format delimited fields terminated by ','
select * from search_log;

  • insert导出linux

-- 将Hive表数据导出到Linux的路径下
insert overwrite local directory '/home'
row format delimited fields terminated by ','
select * from search_log;

2.3 hive_shell命令
hive命令执行sql语句: hive -e "Hive 语句">存储该结果数据的Linux文件路径
​
hive命令执行sql脚本: hive -f hivesql文件>存储该结果数据的Linux文件路径
  • hql语句导出

hive -e "select * from day06.search_log">/home/1.txt

hql脚本导出

[root@node1 home]# cat my_sql.sql 
select * from day06.search_log

hive -f my_sql.sql > /home/2.txt

  • 总结

    1- 如果SQL语句比较简单,SQL的行数在3行以内,可以使用hive -e

    2- 如果SQL语句比较复杂,推荐使用hive -f

2.4 总结
1- 如果数据在Hive表的某一个文件中,可以使用直接下载文件的方式
2- 如果想将Hive表中的数据导出到HDFS路径,推荐使用insert overwrite导出命令
3- 如果只是想将Hive表中的数据导出到linux路径,可以使用insert overwrite导出命令或者hive sell命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就倒头睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值