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

  • Impala/Hive按State分区Accounts

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

在Impala 和Hive里进行数据分区(1)_第1张图片

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

wKiom1h2_FugLa6sAABJqWfJJaE435.png-wh_50

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

二、分区创建

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

在Impala 和Hive里进行数据分区(1)_第2张图片

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

三、查看分区列

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

在Impala 和Hive里进行数据分区(1)_第3张图片

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

四、创建嵌套分区:

在Impala 和Hive里进行数据分区(1)_第4张图片

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

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