`
功夫小当家
  • 浏览: 186437 次
  • 性别: 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表的分区数据较多,该操作可能会耗时较长,请耐心等待。 #### 三、验证修改结果 完成以上步骤后,还需要对修改结果进行验证: 1. **查询新分区的数据**:使用`SELECT * FROM test WHERE ...

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

    - **关键点回顾**:本文介绍了 Hive 数据分区的概念、分区字段的要求以及如何解决中文字符作为分区字段的问题。 - **最佳实践**:始终确保配置文件中的字符编码设置正确,并且在修改任何配置之前都进行充分的备份。 ...

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

    从提供的文件内容可以看出,本文主要介绍的是如何将一个非分区表转换为分区表,其中涉及了四种不同的方法,并且强调了每种方法的执行细节以及注意事项。 1. Export/Import方法 Export/Import方法是最传统的转换策略...

    hive表新增字段或者修改字段

    总结来说,Hive 中的表字段修改和新增操作需要谨慎处理,特别是涉及分区表时。理解元数据管理的机制至关重要,以避免在操作后出现数据不一致的问题。同时,合理选择合适的解决方案,如重新处理数据或使用 `CASCADE` ...

    hive分区表分通表建表语句详解和例子

    **二级静态分区表**则是在表中定义了两个或以上的分区字段,同样需要在加载数据时显式指定所有分区字段的值。 ```sql CREATE TABLE my_partitioner3 ( id BIGINT, name STRING, time DATE, interest ARRAY ) ...

    龙战于野大数据MR原理启动hive查询表分区.docx

    Hive查询表分区的MR原理启动详解 Hive是一款基于Hadoop的数据仓库工具,主要用于处理结构化和半结构化的数据。MR(MapReduce)是Hadoop中的一种编程模型,用于处理大规模数据。在Hive中,MR原理启动是指使用...

    hive分区导入

    【标题】:“Hive分区导入”是大数据处理中常见的操作,它涉及到Hadoop生态中的Hive组件,用于高效管理和查询大规模数据。Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL类...

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

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

    spark操作hive表源码

    SparkSQL会通过HiveMetastore获取表的元数据,包括表的分区信息、字段类型等。然后,它将DataFrame转换为执行计划,这个计划会被优化器进一步优化,生成执行逻辑。最后,这些逻辑被转化为Hive的Task,由Spark的...

    mysql数据抽取,自动生成hive建表语句

    4. **处理分区**:如果需要在Hive中创建分区表,可以分析MySQL表中的时间戳或分类字段,将其设置为Hive的分区字段。 5. **生成Hive建表语句**:基于上述信息,构造Hive的CREATE TABLE语句,包括表名、字段定义、...

    Hive使用手册Hive使用手册

    5. **Hive分区** 分区是提高Hive查询效率的一种手段,允许用户将大表划分为小块。添加分区:`ALTER TABLE my_table ADD PARTITION (partition_col='value');` 删除分区:`DROP PARTITION IF EXISTS my_table ...

    大数据实验六实验报告:熟悉Hive的基本操作

    实验中创建了名为`dividends`的外部分区表,分区字段为`exchange`和`symbol`,结构包括`ymd`和`dividend`字段,数据类型为字符串和浮点型。创建命令如下: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS dividends ...

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

    分发新jar包到各个服务器是必要的步骤,因为Hive通常在分布式环境中运行,每个节点都需要有正确的库才能正确处理ORC文件。确保所有节点的更新同步是保持集群稳定运行的关键。在实际操作中,可以使用如`rsync`或`scp`...

    大数据技术原理及应用课实验6 :熟悉Hive的基本操作

    分区表的好处在于可以根据分区字段快速定位数据,提高查询效率。 3. 导入数据到`stocks`表,这是通过LOAD DATA命令实现的,将csv文件的数据加载到Hive表中。 4. 创建未分区的外部表`dividends_unpartitioned`,...

    hive_big_table.tar.gz

    在实际操作中,使用Hive进行大数据处理时,需要了解如何创建表、加载数据、编写HQL查询、管理分区以及优化查询性能。同时,理解Hadoop的HDFS和MapReduce也是必要的,因为Hive底层依赖这些组件来执行任务。对于大型...

    python处理数据,存进hive表的方法

    如果Hive表的字段顺序与txt文件中的数据顺序不一致,需要重新排列数据字段的位置。对于不匹配的字段,需要填写空值以保持数据行的一致性。在处理数据时,要注意原始数据的分隔符,比如本例中的tab符。这一步是整个...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    在“分区表”章节,你会学到如何通过添加分区字段来优化查询性能。分区是将大表逻辑上划分为更小、更易于管理的部分,通常基于日期、地区等维度。查询时,只扫描与条件匹配的分区,大大减少了数据处理量。 “分桶”...

    Hive4--HIVE元数据库.pdf

    元数据库存储了关于Hive表、列、分区等对象的所有元数据信息,使得Hive能够理解数据的结构和位置,从而执行查询。 元数据库通常存储在关系数据库管理系统(RDBMS)中,例如MySQL或Derby。在本例中,我们以Derby为例...

    大数据技术之Hive-02(优化).pdf

    - 数据加载到分区表时,需注意数据的格式和日期格式是否一致,确保分区字段与数据匹配。 - 错误的分区加载会导致查询结果不正确或查询效率低下。 3. **执行计划分析**: - 分析查询的执行计划是Hive优化的重要...

Global site tag (gtag.js) - Google Analytics