当前位置:首页 > 开发 > 互联网 > 正文

hive表分区字段需要注意的问题

发表于: 2015-01-22   作者:功夫小当家   来源:转载   浏览次数:
摘要:           近期项目中使用hive做数据统计,创建了一些hive表,在这个过程中,涉及到了设计分区的问题,简单做个总结,以新增表为例:       V1版本: CREATE TABLE IF NOT EXISTS stat_install( uuid string, ve

          近期项目中使用hive做数据统计,创建了一些hive表,在这个过程中,涉及到了设计分区的问题,简单做个总结,以新增表为例:

 

    V1版本:

CREATE TABLE IF NOT EXISTS stat_install(
uuid                string,
ver                 int,
version_code        int,
channel             int,
ipaddr              bigint,
dpi                 int,
device              int,
os                  int,
country             int,
language            string,
province            int,
agent               string,
network             int,
upgrade             int,
install_date        string
) PARTITIONED by (year int, month int, day int, hour int)
ROW format delimited fields terminated by "#";

   

 

    V2版本:

CREATE TABLE IF NOT EXISTS stat_install(
uuid                string,
ver                 int,
version_code        int,
channel             int,
ipaddr              bigint,
dpi                 int,
device              int,
os                  int,
country             int,
language            string,
province            int,
agent               string,
network             int,
upgrade             int,
install_date        string
) PARTITIONED by (dt string)
ROW format delimited fields terminated by "#";

 

 

         V1版本,按照year,month,day,hour分区。分区的字段比较细,统计小时任务只需指定 hour = ?;统计天任务只需指定day = ?;年任务 year = ?;看起来不错,但是当跑周任务或者跨天的任务时候,就很难用year,month,day去表示一个时间段了,这时候就需要使用install_date字段取表示范围  

例如:查找 2015-01-19 开始一周的数据:

install_date >= '2015-01-19' and install_date < '2015-01-26';

而install_date并非分区字段,查询起来是非常慢的;而且这样分区还有一个弊端就是文件分的过细;

 

       V2版本,重新按照dt分区,例如:dt = ‘2015-01-19’,这样可以很好地解决跨天的问题,但是小时任务只能根据install_date去做限定。

例如:查找 2015-1-19号 hour = 10 的数据:

 install_date >= '2015-01-19 10:00:00' and install_date < '2015-01-19 11:00:00'

 

       V2版本相对V1,处理数据更方便,如果小时数据比较多,也可以考虑V3版本使用: (dt string, hour int)进行分区。如果涉及海外数据的话,需要考虑时区问题,可以通过设置服务器时区为东八区;或者不想设置时区的话,分区使用时间戳的形式,从统计到前端展示都使用时间差戳。时间戳的缺点是不直观, 如果hive中的数据出错,不好排查。

    

       分区方式比较重要,决定了查询的性能,欢迎大家讨论和指教。

 

 

 

hive表分区字段需要注意的问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1.使用oracle sql developer 4.0.3作为hive query的IDE。 下载hive-jdbc driver http://www.clouder
1.对于分区数量很多的分区表,可以使用动态分区让hive帮你自动创建所需的分区表: 以上两个参数分别
1:分区表 图:创建分区表 图:导入数据 图:在HDFS的显示信息 分区字段就是一个文件夹的标识 图:
1 受控表(managed table): hive中将创建的表和实际对应hdfs目录结构和文件相对应,如果删除hive中
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据
软文,无疑是网络推广的必备利器,软文对于网站或者品牌推广的重要性是大家有目共睹的,我多次内部
软文,无疑是网络推广的必备利器,软文对于网站或者品牌推广的重要性是大家有目共睹的,我多次内部
软文,无疑是网络推广的必备利器,软文对于网站或者品牌推广的重要性是大家有目共睹的,我多次内部
软文,无疑是网络推广的必备利器,软文对于网站或者品牌推广的重要性是大家有目共睹的,我多次内部
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号