`
功夫小当家
  • 浏览: 182927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • hive
阅读更多

          近期项目中使用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表分区名称

    hive表修改分区数据

    BLOG_如何将一个普通表转换为分区表.pdf

    BLOG_如何将一个普通表转换为分区表.pdfBLOG_如何将一个普通表转换为分区表.pdf

    hive数据分区时分区字段不可为中文。.doc

    hive数据分区时分区字段不可为中文。

    Hive使用手册Hive使用手册

    目录 1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 ...12 Hive使用注意点: 6 13 Hive优化 9

    Hive分区表

    一:简介 分区表就是根据指定字段的值进行分类、分组,字段值相同的分为一类然后存储在一个单独的HDFS文件中,多个类就存储在多个文件中。...静态分区适合分区字段的值比较少的情况。 动态分区:创建表

    bdp2hive:生成hive分区表、sqoop导入数据至hive

    hive分区表生成组件主要是通过获取数据集及数据集item的code,数据集code作为hive表名,数据集item code作为hive分区表字段,同时加入相关字段,形成hive表的基本结构。项目结构─src ├─main │ ├─java │ │ └...

    hive2.1.1中orc格式读取报数组越界错误解决方法

    hive2.1.1orc格式读取报数组越界错误,替换jar包。hive-exec-2.1.1-cdh6.3.2.jar、hive-orc-2.1.1-cdh6.3.2.jar。分发各个服务器即可。

    【63课时完整版】大数据实践HIVE详解及实战

    14.Hive中分区表的创建及使用 15.Hive中数据导入的6种方式及其应用场景 16.Hive中数据导出的4种方式及表的导入导出 17.Hive中HQL的基本语法(一) 18.Hive中HQL的基本语法(二) 19.Hive中order by、sort by、...

    hive仓库元数据管理系统

    1.hive元数据信息的查看,包括表基本信息,数据库基本信息,字段信息,分区信息,索引信息等; 2.对hive元数据的检索,包括表、字段、数据库等内容的检索 3.元数据信息更新(目前只提供对库、表、字段的描述信息进行...

    Hive学习记录

    Hive学习记录,一些关于hive分桶、分区的知识。有需要自己下载。

    全国职业技能大赛大数据赛项十套赛题(shtd)

    info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态...

    Binlog2Hive:MySQL增量数据实时同步到HDFSHive

    并映射到Hive原理通过解析RDS的binlog将RDS的增量数据同步到HDFS下,并映射加载到Hive外部分区表由于RDS表中的第二个字段都为datetime字段,所以刚才以该字段作为Hive的分区字段配置文件介绍doc/creat table.sql:...

    HIVE 自建落地表

    自建落地表为什么要自建落地表HIVE SQL创建内/外部表、分区表insert overwrite 向分区表插入数据 为什么要自建落地表 1、公司的大数据资源非常紧张, 2、导数逻辑很复杂; 3、日常导数要求时效性高; 4、部门数仓的...

    hive操作命令大全.txt

    # 注意:若是外部表,则还需要删除文件(hadoop fs -rm -r -f hdfspath) alter table table_name drop if exists partitions (d=‘2016-07-01'); # 字段类型 # tinyint, smallint, int, bigint, float, decimal,...

    自动生成hive建表语句查询语句程序及源码.rar

    在excel模板中填写自己表的字段英文名、字段类型、字段中文名、分区英文名、分区数据类型、分区中文名、表英文名、表中文名,自动生成建表语句和查询语句,提高日常数据效率。 前提:本机安装java1.7,并且配置了...

    vba自动建表.zip

    批量生成hive表;自动区分分区表和非分区表;分区字段可以直接从字段中指定。如果其他诉求,可以修改;

    HIVE查询优化

    Hive QL的执行本质上是MR任务的运行,因此优化主要考虑到两个方面:Mapreduce任务优化、SQL语句优化 一、Mapreduce任务优化 1、设置合理的task数量(map task、reduce task) 这里有几个考虑的点,一方面Hadoop MR ...

    Increment_Backup_To_Hive:一个增量备份关系数据库(MySQL, PostgreSQL, SQL Server, SQLite, Oracle等)到hive的php脚本工具

    支持压缩表+多分区+字段增减。环境脚本内部会调用hive命令,所以必须运行在安装hiveLinux主机上。你需要安装PHP5.4以上的版本,推荐安装PHP7.x。在centos7上安装php70参考:yum -y install ...

    common-datax:基于DataX的通用数据同步微服务,一个Restful接口搞定所有通用数据同步

    所以:提供通用数据抽取restful接口HDFS自动创库创表创分区利用freemarker模板自动创建json文件自动python执行job集成Azkaban进行调度管理例如:mysql到hive选择mysql需要同步的表、字段等信息,输入导入到hive的库...

    快速学习-Hive企业级调优

    在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce。 hive.fetc

Global site tag (gtag.js) - Google Analytics