Apache Hive中如何进行分区

存储架构 2017-05-22 阅读原文

译者:CY2

Hive 是用于大数据集查询的好工具 —— 特别是当数据集需要全表扫描时。但用户经常需要对某个列的值进行过滤,这时候分区就非常有效。分区是一个包含数据块的目录。当我们做分区的时候,会为某个列的唯一值创建一个分区。

让我们来运行一个简单的示例来了解分区特性。创建分区表的语法是:

create table tablename(colname type) partitioned by(colname type);

如果 hive.exec.dynamic.partition.mode 设置为 strict,那么你至少需要一个静态分区。而 non-stric 模式下,所有的分区都是动态的。

这里我们创建了一个名为 emp_info 的表,包含两个字段 name 和 address。我们通过列 ID (类型 nt)对表进行分区,然后往表里插入数据。重点需要考虑的时候分区的列的基数(也就是该列包含唯一值的个数)。选择基数很高的列来做分区会导致数据严重的碎片化。不要对数据过分的分区。如果有太多的小分区,那么对这么多的分区目录进行扫描代价也是比较高的,甚至可能比全表扫描还高。

下面是插入 values 的语法:

insert into partition values();

首先我们插入一个 id=1 的记录,然后插入 id=2 的另外一条记录。

现在,进入 Hadoop 文件系统的 /user/hive/warehouse/default/empinfo 目录。

正如我们所看到的,这里有两个分区:一个名是 id=1 ,另外一个 id=2。当我们执行带 where 语句的查询时,就不会进行全表扫描,而只是扫描所需的分区。

如果你尝试对一个未分区的大数据集表,就会花很长时间,因为要进行全表的扫描。

希望这篇文章对你有用。 祝编码快乐!

End.

36大数据

责编内容by:36大数据阅读原文】。感谢您的支持!

您可能感兴趣的

The data in the HDFS files are not seen under the ... The updates in the xml file are not visible to the flash program ...
What do Vegas hookers, Colombian government, and 3... Over the past few months there has been an alarming rise in the number of websit...
Caching on EMR Using RubiX: Performance Benchmark ... Last year, Qubole introduced a fast caching framework for big data engines. This...
在Hadoop 中用 hive 命令启动时报错:expansion character (code ... 错误信息: Exception in thread "main" java.lang.RuntimeException: com.ctc...
后渗透工具Koadic:你真的了解我吗? 前言: 在朋友的博客上看到推荐的一款工具Koadic,我接触了以后发现很不错 这款工具的强大之处我觉得就是拿到shell后的各种模块功能,我就自己写出...