zoukankan      html  css  js  c++  java
  • Hive入门(二)分区

    1 基本概念

    1.1 什么是分区

    Hive查询中一般会扫描整个表内容,会消耗很多时间。有时候只需要查询表中的一部分数据,因此建表时引入了partition(分区)概念。

    表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中,因此,使用分区,很容易对数据进行部分查询。

    1.2 分区特点

    • 一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下;
    • 表和列名不区分大小写;
    • 分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

    注意:

    创建分区必须在建表前。 

    2 分区使用

    2.1 创建

     a) 单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);

    单分区表,按天分区,在表结构中存在id,content,dt三列。以dt为文件夹区分

    b) 双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);

    双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。先以dt为文件夹,再以hour子文件夹区分

    2.2 添加

    如果是分区外部表一定要对外部表执行ALTER TABLE table_name ADD PARTITION。否则是根本访问不到数据的

    1)修改表添加分区(表已创建,在此基础上添加分区

     假定有hive中有empl_ext(外部表),有分区(logdate string);

    alter table empl_ext add partition (logdate=2015-02-26’) location ‘hdfs://nameservice1/vod_pb/’;

    2)数据加载进分区表中

    load data inpath 'hdfs://nameservice1/vod_pb/' overwrite into table empl_ext   partition(logdate='2015-02-26');

    当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录,文件存放在该分区下

  • 相关阅读:
    怎么用js实现jq的removeClass方法
    减少事件绑定次数
    JS setAttribute兼容
    css3常用动画+动画库
    小tip: transition与visibility
    image的srcset属性
    jqeury点击空白关闭弹窗
    卡片翻转效果
    div+css 圆角加阴影
    函数
  • 原文地址:https://www.cnblogs.com/zcjcsl/p/7840819.html
Copyright © 2011-2022 走看看