美文网首页
hive外部表分区

hive外部表分区

作者: nil_ddea | 来源:发表于2020-10-19 00:30 被阅读0次

    外部表和内部表

    内部表:
    数据由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外部表分区

          本文链接:https://www.haomeiwen.com/subject/yuhbpktx.html