hive外部表分区

外部表和内部表

内部表:
数据由hive自身管理 存储在hive指定的hdfs目录中 删除会删除数据本身
外部表(external):
数据存储在用户使用location关键字指定的hdfs目录中 hive中仅存储一份元数据 删除操作不会影响到hdfs中原本的数据文件

分区

将hdfs中文件存储在不同的目录下 hive查询时仅查询指定目录下的数据 避免扫描全部文件 可以极大的加速查询 hive支持静态分区和动态分区
静态分区由用户指定分区所在的目录 而动态分区由表中的某一个字段来决定每条数据所在的分区

外部表静态分区实例

CREATE EXTERNAL TABLE `bill`(
  `id` int, 
  `fee` int, 
  `timestampe` int
)
partitioned by (day int)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'=',', 
  'serialization.format'=',') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://header/bill/'

创建了一个bill表其中包含三个业务字段
partitioned by (day int) 指定了day为分区标志 在查询时使用 where day = 20201010 来指定分区

alter table bill add partition (day=20201010) location '/bill/20201010'

为bill表添加一个分区目录20201010 当指定day = 20201010时 将在这个分区查询数据
随日期增加 需要手动将对应日期的目录作为分区添加到bill中 可以使用crontab 每天自动执行一次添加分区的操作

你可能感兴趣的:(hive外部表分区)