在Impala 和Hive里进行数据分区(1)

进行数据分区将会极大的提高数据查询的效率,尤其是对于当下大数据的运用,是一门不可或缺的知识。那么数据怎么创建分区呢?数据怎样加载到分区呢?

  • Impala/Hive按State分区Accounts

(1)示例:accounts是非分区表

通过以上方式创建的话,数据就存放在accounts目录里面。那么,如果Loudacre大部分对customer表的分析是按state来完成的?比如:

这种情况下如果数据量很大,为了避免全表扫描的发生,我们可以去创建分区。如果不创建分区的话,它会默认所有查询不得不扫描目录的所有文件。创建分区按state将数据存储到不同的子目录,当按照“NY”的条件进行查询的时候,它只会扫描到子目录,下面我具体来看一下分区创建。

二、分区创建

(1)使用PARTITIONED BY来创建分区表

在这里注意state是被删除掉的,因为它作为分区字段,我们知道分区数据是不会出现在实际的文件当中的,所以state作为分区字段是不会出现在列当中的。换句话说,分区键就是一个虚列,它是不会存在列当中的。那么,如何去查看我们分区的列呢?它会出现在我们的结构当中吗?会的。

三、查看分区列

使用DESCRIBE显示分区列,它会出现在结构最后一列,它是一个虚列,并不是真实在数据中存在的列。

我们创建单个分区,但有时候会有嵌套分区,如何来处理呢?

四、创建嵌套分区:

创建好了分区,我们怎么加载数据到分区呢?有两种方式动态分区和静态分区。动态分区是指Impala/Hive在加载的时候自动添加新的分区,数据基于列值存储到正确的分区(子目录)。而静态分区需要我们通过ADD PARTITION提前去定义分区的名称,当加载数据的时候,指定存储数据到哪个分区。那么动态分区和静态分区各有什么特征呢?后续为大家接着分享。

对于大数据,我们应该积极主动的去迎合和学习,因为它没有成熟的体系,还在发展上升,只有不断学习提升才可以赶上发展的步伐。建议在平时大家多学习交流,我在平常喜欢关注“大数据cn”这个微信公众号,对于我个人而言,很不错,推荐围观。

时间: 2024-10-15 18:49:04

在Impala 和Hive里进行数据分区(1)的相关文章

解密数据分区

   数据分区分为两种,动态分区和静态分区,那么两种分区是怎样创建的呢?它们各自怎么来使用呢? 一.动态分区 1.从已有的数据动态创建新的分区 2.分区基于最后一个列值自动创建,如果分区不存在,它将被创建: 如果分区存在,将被覆盖. 二.静态分区 1. 静态分区示例:按天分区呼叫日志 Loudacre的客户服务电话系统生成了详细的呼叫日志,分析员使用这些数据来汇总前一天的呼叫量,比如: 日志按天生成,比如: 在上面的的示例中,数据基于列值自动分区.现在我们使用静态分区, 因为数据文件不包含分区数

【转】Impala和Hive的关系

转自https://www.cnblogs.com/zlslch/p/6785207.html?utm_source=itdadao&utm_medium=referral Impala和Hive的关系  Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中.并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中. 与Hive的关系 Impala 与

Impala与Hive的比较

1. Impala架构 Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner.Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT.JOIN和统计函数查询数据,从而大大降低了延迟.其架构如图 1所示,Impala主要由Im

Impala与Hive的比較

1. Impala架构 Impala是Cloudera在受到Google的Dremel启示下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner.Query Coordinator和Query Exec Engine三部分组成),能够直接从HDFS或HBase中用SELECT.JOIN和统计函数查询数据,从而大大减少了延迟.其架构如图 1所看到的,Impala主要由

hive里的分区

为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成"分区". 分区是一种根据"分区列"(partition column)的值对表进行粗略划分的机制.Hive中的每个分区对应数据库中相应分区列的一个索引,每个分区对应着表下的一个目录,在HDFS上的表现形式与表在HDFS上的表现形式相同,都是以子目录的形式存在. 一个表可以在多个维度上进行分区,并且分区可以嵌套使用.建分区需要在创建表时通过PARTITIONED BY子句指定,例如: CREATE TAB

【转】Hive 基础之:分区、桶、Sort Merge Bucket Join

Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 SMB join 的,Join 是整个 MR/Hive 最为核心的部分之一,是每个 Hadoop/Hive/DW RD 必须掌握的部分,之前也有几篇文章聊到过 MR/Hive 中的 join,其实底层都是相同的,只是上层做了些封装而已,如果你还不了解究竟 Join 有哪些方式,以及底层怎么实现的,请参

hive里的优化和高级功能

在一些特定的业务场景下,使用hive默认的配置对数据进行分析,虽然默认的配置能够实现业务需求,但是分析效率可能会很低. Hive有针对性地对不同的查询进行了优化.在Hive里可以通过修改配置的方式进行优化. 以下,几种方式调优的属性. 1.列裁剪 在通过Hive读取数据的时候,并不是所有的需求都要获取表内的所有的数据.有些只需要读取所有列中的几列,而忽略其他列的的数据. 例如,表Table1包含5个列Column1.Column2.Column3.Column4.Column5.下面的语句只会在

Hive[5] HiveQL 数据操作

5.1 向管理表中装载数据  Hive 没有行级别的数据插入更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作,或者通过其他方式仅仅将文件写入到正确的目录下: LOAD DATA LOCAL INPATH '${env:HOME}/califonia-employees' OVERWRITE INOT TABLE employees PARTITON (country=''US, state='CA') ; 向管理表中装载数据,如果目录不存在的话, overwrite

hive 构建外表及分区

hive里分了create table和create external table,external table的好处就是表结构和数据是解绑的,删除表并不会删除数据,表相当于就是定义了去解析相对应的文件时的规范而已. 一个比较常见的应用场景是将网站的用户浏览数据建立一个外表,然后按天做分区加快查找效率. 创建表 create EXTERNAL table sms_detail( mobile_type int, msg_id bigint) partitioned by (data_date s