search
HomeDatabaseMysql Tutorialhive分区(partition)简介
hive分区(partition)简介Jun 07, 2016 pm 02:53 PM
hivepartitionaboutPartitionIntroduction

网上有篇关于hive的partition的使用讲解的比较好,转载了: 一、背景 1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。 2、分区表指的是在创建表时指定

网上有篇关于hive的partition的使用讲解的比较好,转载了:

一、背景

1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。

2、分区表指的是在创建表时指定的partition的分区空间。

3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。

二、技术细节

1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。

2、表和列名不区分大小写。

3、分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

4、建表的语法(建分区可参见PARTITIONED BY参数):

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]

5、分区建表分为2种,一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。

a、单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列。

b、双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。

 

表文件夹目录示意图(多分区表):


6、添加分区表语法(表已创建,在此基础上添加分区):

ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ... partition_spec: : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)

用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。例:

ALTER TABLE day_table ADD PARTITION (dt='2008-08-08', hour='08') location '/path/pv1.txt' PARTITION (dt='2008-08-08', hour='09') location '/path/pv2.txt';

7、删除分区语法:

ALTER TABLE table_name DROP partition_spec, partition_spec,...

用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。例:

ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');

8、数据加载进分区表中语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

例:

LOAD DATA INPATH '/user/pv.txt' INTO TABLE day_hour_table PARTITION(dt='2008-08- 08', hour='08'); LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hour partition(dt='2010-07- 07');

当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录,文件存放在该分区下。

9、基于分区的查询的语句:

SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

10、查看分区语句:

hive> show partitions day_hour_table; OK dt=2008-08-08/hour=08 dt=2008-08-08/hour=09 dt=2008-08-09/hour=09

三、总结

1、在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在最字集的目录中。

2、总的说来partition就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。

——————————————————————————————————————

hive中关于partition的操作:
hive> create table mp (a string) partitioned by (b string, c string);
OK
Time taken: 0.044 seconds
hive> alter table mp add partition (b='1', c='1');
OK
Time taken: 0.079 seconds
hive> alter table mp add partition (b='1', c='2');
OK
Time taken: 0.052 seconds
hive> alter table mp add partition (b='2', c='2');
OK
Time taken: 0.056 seconds
hive> show partitions mp ;
OK
b=1/c=1
b=1/c=2
b=2/c=2
Time taken: 0.046 seconds
hive> explain extended alter table mp drop partition (b='1');
OK
ABSTRACT SYNTAX TREE:
  (TOK_ALTERTABLE_DROPPARTS mp (TOK_PARTSPEC (TOK_PARTVAL b '1')))

STAGE DEPENDENCIES:
  Stage-0 is a root stage

STAGE PLANS:
  Stage: Stage-0
      Drop Table Operator:
        Drop Table
          table: mp


Time taken: 0.048 seconds
hive> alter table mp drop partition (b='1');
FAILED: Error in metadata: table is partitioned but partition spec is not specified or tab: {b=1}
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
hive> show partitions mp ;
OK
b=1/c=1
b=1/c=2
b=2/c=2
Time taken: 0.044 seconds
hive> alter table mp add   partition ( b='1', c = '3') partition ( b='1' , c='4');
OK
Time taken: 0.168 seconds
hive> show partitions mp ;
OK
b=1/c=1
b=1/c=2
b=1/c=3
b=1/c=4
b=2/c=2
b=2/c=3
Time taken: 0.066 seconds
hive>insert overwrite table mp partition (b='1', c='1') select cnt from tmp_et3 ;

hive>alter table mp add columns (newcol string);

 

location指定目录结构
hive> alter table alter2 add partition (insertdate='2008-01-01') location '2008/01/01';

hive> alter table alter2 add partition (insertdate='2008-01-02') location '2008/01/02';

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
解决win11系统保留分区无法更新的问题解决win11系统保留分区无法更新的问题Dec 26, 2023 pm 12:41 PM

在更新了win11后有些用户遇到了无法更新系统保留的分区,导致没法使用下载更多的新软件,所以今天就给你们带来了win11无法更新系统保留的分区解决方法,赶快来一起下载试试吧。win11无法更新系统保留的分区怎么办:1、首先右击下方的开始菜单按键。2、然后右击菜单点击运行。3、在运行中输入:diskmgmt.msc回车。4、之后可以进入系统磁盘,查看EFI系通分区,查看空间是否小于300M。5、如果太小可以下载工具将系统预留分区改成大于300MB建议450M即可。

win10安装后无法分区的解决方法win10安装后无法分区的解决方法Jan 02, 2024 am 09:17 AM

我们再重装win10操作系统的时候,到了磁盘分区的步骤却发现出现系统提示无法创建新的分区也找不到现有分区。对于这种情况小编觉得可以尝试将整个硬盘重新进行格式化再次安装系统进行分区,或者通过软件重新进行系统安装等等。具体内容就来看看小编是怎么做的吧~希望可以帮助到你。安装win10无法创建新的分区怎么办方法一:格式化整个硬盘重新分区或尝试插拔U盘几次并刷新,如果你的硬盘上没有重要数据的话,到了分区这一步时,将硬盘上的所有分区都删除了。重新格式化整个硬盘,然后重新分区,再进行安装就正常了。方法二:P

win10分区整理的整数计算解决方法win10分区整理的整数计算解决方法Dec 30, 2023 pm 07:41 PM

在Windows分区时如果简单地按照1GB=1024MB的方式输入计算出来的值的话,最终总是只能得到类似259.5GB/59.99GB/60.01GB这样结果,而不是整数,那么win10分区整数是如何计算的呢?下面跟小编一起来看看吧。win10分区整数计算的公式:1、公式为:(X-1)×4+1024×X=Y。2、想要得到Windows的整数分区必须要知道一个公式,通过这个公式算出的值才能被Windows认成整数GB的值。3、其中,X就是想要得到的整数分区的数值,单位是GB,Y是分区时应该输入的数

深度Linux硬盘分区及安装教程:一步步实现系统的高效部署深度Linux硬盘分区及安装教程:一步步实现系统的高效部署Feb 10, 2024 pm 07:06 PM

在进行深度Linux的安装之前,我们需要对硬盘进行分区,硬盘分区是将一块物理硬盘划分为多个逻辑区域的过程,每个区域可以独立使用和管理,正确的分区方式可以提高系统的性能和稳定性,因此这一步非常重要,本文将为您提供详细的深度Linux硬盘分区及安装教程。准备工作1.确保您已经备份了重要的数据,因为分区过程会清除硬盘上的所有数据。2.准备一个深度Linux的安装媒介,例如U盘或光盘。硬盘分区1.开机进入BIOS设置,将启动媒介设置为首选启动设备。2.重启计算机,从启动媒介引导进入系统安装界面。3.选择

CentOS安装Gunicorn及CentOS安装分区教程CentOS安装Gunicorn及CentOS安装分区教程Feb 10, 2024 pm 09:20 PM

LINUX是一个强大的操作系统,被广泛应用于服务器和开发环境,CentOS是基于RedHatEnterpriseLinux(RHEL)的一个开源操作系统,被广泛使用于服务器环境中,在CentOS上安装Gunicorn和进行分区可以提高服务器的性能和安全性,本文将详细介绍如何在CentOS上安装Gunicorn以及如何进行分区。CentOS安装GunicornGunicorn是一个Python的WSGIHTTP服务器,用于运行Python的Web应用程序,以下是在CentOS上安装Gunicorn

如何最优化Win11磁盘性能?如何最优化Win11磁盘性能?Jun 30, 2023 am 08:33 AM

win11怎么优化磁盘性能?我们都知道,磁盘性能越高,电脑进行读写的速度越快,运行系统越不卡、开机也更快。本期教程小编就带大家来了解win11系统提升磁盘性能操作方法,感兴趣的朋友们一起来看看吧。win11系统提升磁盘性能操作方法  1、首先,往电脑插入U盘,或移动硬盘,然后进入此电脑,找到对应的磁盘,点击右键,在打开的菜单项中,选择属性;  2、设备属性窗口,切换到硬件选项卡,选择U盘,或移动硬盘对应的设备,然后点击右下角的属性;  3、接着,会弹出该设备的属性窗口,切换到常规选项卡,再点击改

Windows 11分区指南Windows 11分区指南Jan 04, 2024 am 08:28 AM

在使用win11系统的时候,分区也是一个很重要的步骤,我们可以将不同的软件装在不同的盘里这样大大的增加了安全性,要是没有进行分盘的小伙伴可以赶紧分个盘。win11分区教程:1、首先我们右键“此电脑”然后点击“管理”。2、接着打开“磁盘管理”。3、然后选择一个需要分区的磁盘。4、接着打开压缩卷。5、输入压缩空间的大小。6、然后点击下面的“压缩”。7、找到新建界面。8、点击下一页。9、然后输入新建分区的大小,点击下一页。10、接着输入磁盘的序号。11、选择一个磁盘格式化的方式。12、最后点击完成就可

win7怎么初始化硬盘win7怎么初始化硬盘Dec 23, 2023 am 10:44 AM

win7系统是一款被大多数用户们信赖的优秀系统!超强的稳定性是系统最为出色的地方,最近一直有小伙伴们问win7怎么初始化硬盘?今天小编就为大家带来了win7电脑初始化硬盘的图文操作步骤一起来看看吧。win7怎么初始化硬盘的操作步骤:图文详细教程:1、右键计算机,选择管理。2、从弹出的计算机管理界面中选择磁盘管理。3、右键需要格式化的磁盘,从弹出的菜单中选择格式化。4、弹出格式化参数,根据个人需要进行设置.设置完成点击确定。5、弹出格式确认提示,点击确定。6、此时会在磁盘管理的下方图示位置显示该磁

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.