Hive 与数据的“替身文学”:load 是搬运,put 是偷渡,as 是克隆,like 是借尸还魂

1.加载本地数据:

创建一个文件夹,将来把所有的数据,都放在这个文件下:

mkdir /home/hivedata

创建一个文件 user.txt

添加如下数据:

1,宝总

2,李李

3,小汪

4,爷叔

先有数据,根据数据的格式,和字段数量以及类型,创建一个表:

create table t_user(
id int,
name string
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;

加载本地数据:

load data local inpath "/home/hivedata/user.txt" into table t_user;

查看数据是否加载成功:
select * from t_user limit 10;

你能够看到里面的数据,并且没有乱码,原因是stored as textfile

2.从HDFS加载到Hive中:

hdfs dfs -put /home/hivedata/user.txt /home

将hdfs的数据导入到t_user 表中:

load data inpath '/home/user.txt' into table t_user;

就比之前少了一个 local 关键字。

查看hdfs上的user.txt 发现不见了,去哪里了,被移动走了!

思考一下:为什么是移动,而不是复制?

因为hdfs上的数据,默认都以为比较大,所以如果相同的数据占2份,非常的消耗空间。

查看数据,发现有两份,想覆盖怎么办?

load data local inpath '/home/hivedata/user.txt' overwrite into table t_user;

3.将数据直接放入表对应的文件夹下

再思考一个问题:既然hive中的数据是在hdfs上的,我们也可以手动的上传数据,能上传至/home,为何不能上传至:/user/hive/warehouse/yhdb.db/t_user

[root@bigdata01 hivedata]# cp user.txt user2.txt 
[root@bigdata01 hivedata]# hdfs dfs -put /home/hivedata/user2.txt /user/hive/warehouse/yhdb.db/t_user

hive中的数据,不要load 也可以被正常使用。

4.从其他表中加载数据

语法格式:

insert into table tableName2 select [.....] from tableName1;

扩展内容:向多张表中插入数据的语法
    from tableName1
    insert into tableName2 select * where 条件
    insert into tableName3 select * where 条件
实战:
insert into table t_user2 select * from t_user;
这个sql的前提条件是:必须先创建一个t_user2
快速创建一个同样的表,只要表结构:
create table t_user2 like t_user;
创建完之后再运行
insert into table t_user2 select * from t_user;


创建t_user3和 4
create table t_user5 like t_user;
create table t_user4 like t_user;

from t_user2
insert into t_user4 select *
insert into t_user5 select id,name;

5.克隆表数据

- create table if not exists tableName2 as select [....] from tableName1;
- create table if not exists tableName2 like tableName1 location 'tableName1的存储目录的路径'     
# 新表不会产生自己的表目录,因为用的是别的表的路径
​
扩展内容:只复制表结构
create table if not exists tableName2 like tableName1;

实战:
create table t_user6 as select * from t_user2;
create table t_user7 like t_user2 location '/user/hive/warehouse/hive02.db/t_user2';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值