oracle的外部表和内部表链接,内部表、外部表和分区表

内部表与外部表

创建内部表语句

create table student(

id string,

name string

) row format delimited fields terminated by 't';

创建外部表语句

create external table student(

id string,

name string

) row format delimited fields terminated by 't';

通过 external 关键词来进行区分

因为外部表更多用于引用外部的数据,也不希望对原始数据继续破坏,所以要配合location来指定外部表要读取数据的位置

删除内部表或者清空都会将数据真正的删除,如果是外部表,只会讲我们表的关联信息删除掉,对我们指定位置下的内容没有任何影响

当然不是说内部表就不能使用location

load data inpath(从hdfs上进行数据导入就会将我们的数据移动到table所使用的目录下)

分区表

相当于在表中又分了小表

作用是可以减小我们有一定条件时的查询数据量,提升我们的查询效率

分区不是只能有一层的,我们可以创建多层的形式,即小表中在创建小表

create table whtime(id int,name string)

partitioned by(year string,month string)

row format delimited fields terminated by 't';

创建好分区后要进行数据的导入,在这里需要制定好将数据导入到哪个分区,否则不知道哪个分区

比如两个分区的话,需要指定

load data inpath '/dbdata/user.log' into table whtime partition(year='2018',month='01');

insert into birthday partition(month='01')

select id,name,month from persons where month = '01';//

分区表的信息查看

show partitions 表名

动态分区

使用场景:

当我们想对数据进行分区的时候,你拿到的数据却未必是已经分好区的文档,并不能直接load进就能用

这时候我们进程使用动态分来解决这种问题

列如:

+————-+—————+—————-+—————–+–+

| persons.id | persons.name | persons.month | persons.gender |

+————-+—————+—————-+—————–+–+

| 1 | tabn | 02 | man |

| 2 | sdasd | 03 | man |

| 3 | jsjuiw | 04 | man |

| 4 | kloie | 05 | man |

| 5 | slfdfj | 05 | man |

| 7 | nvshen | 10 | women |

| 8 | nvshenjin | 09 | women |

| 9 | xiaomimei | 10 | women |

| 10 | xiaobai | 01 | women |

+————-+—————+—————-+—————–+–+

给你如上文档,让你把数据加入到按月份分区的表中1.将混乱的数据传到一个表中

2.创建对应的分区表

3.向分区表动态分区的插入数据

insert into birthday partition(month)

select id,name,month from persons;

- 3.1如果要进行动态分区,就不要在partition(month)中设置固定值,不然就不是动态分区了

- 3.2默认使用的是严格模式,是不允许动态分区的,我们在命令行执行set hive.exec.dynamic.partition.mode=nonstrict;

- 3.3使用动态分区会将查询结果集的最后一个作为分区条件,所以select查询要注意

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值