hive学习笔记管理表外部表静态分区动态分区

正常使用create关键字创建的表都是管理表 table_type都是 MANAGED_TABLE

内部表的特性是将内部表的数据移动到对应{hive.metastore.warehouse.dir}的DataNode上

在删除内部表是会在删除元数据的同时删除数据

外部表创建的关键字是external

由local标识数据存储的位置,在drop表的时候外部表的删除的时候只会删除元数据而不会删除原始数据

在进行表结构的复制的时候如果原数表是外部表那么新生成的依然是外部表,及时是没有external关键字标识也是一样

静态分区

分区的关键字是partitioned by

创建分区之后 在hdfs上回创建分区目录的子目录,而不是常规的单表名目录

分区字段一旦创建好会和普通的字段没有什么差别

分区能够更快的查询,当查询某一个国家时只需要扫描一个分区列就可以。

默认情况下未经包含所有分区查询的查询语句是不允许提交因为这样会触发非常大的MapReduce任务这样的模式成为严格模式可以通过设置属性:set hive.exec.dynamic.partition.mode=nonstrict;

     hive>load data local inpath '/home/hyxy/logs.txt' into table hive.logs partition (dt='2018-08-08',country='changchun');
     hive>load data local inpath '/home/hyxy/logs1.txt' into table hive.logs partition (dt='2018-08-08',country='haerbin');


        hive>select * from hive.logs;
        OK
        1231    dflksajflkshfdlksdf    2018-08-08    changchun
        123132    asjflkafjlkajflkaf    2018-08-08    changchun
        12131    jkldjflksfdlksfddsf    2018-08-08    changchun
        12    ccc    2018-08-08    haerbin
        32    aaa    2018-08-08    haerbin
        31    ffff    2018-08-08    haerbin

 

但是静态分区的分区列需要手动设置非常的不方便

动态分区

hive> create table stocks_partitions(exchange1 string,symbol string,ymd string,price_open float,price_high float,price_low float,price_close float,volume int,price_adj_close float) partitioned by (year string,month string) row format delimited fields terminated by ',';

创建一张股票数据表 分区通过年份和月份 通过‘,’切分

insert overwrite table stocks_partitions partition(year,month)

select exchange1,symbol,ymd,price_open,price_high,price_low,price_close,volume,price_adj_close,substr(ymd,0,4)

as year,substr(ymd,6,2) as month from stocks;

插入语句主要分为分为两部分  值得注意的是insert 后面接的是overwrite 是覆盖而不是into 后面再接表明和分区 这里的关键字是partition而不是定义时用的partitioned 

此时算得上是声明部分 主要声明的是  插入的类型  被插入的表  以及分区字段

第二部分为从原始表中选择的字段 以及上面声明的分区键的截取范围

大体的框架为 从那张表选择哪些字段插入覆写到新表中 并选取那个字段的 那个范围 作为声明的分区

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值