2018-09-03期 Hive 分区表
admin
2023-01-31 11:07:11
0

一、分区表概述

分区表也是内部表,创建表时可以同时为表创建一个或多个分区,这样我们在加载数据时为其指定具体的分区,查询数据时可以指定具体的分区从而提高效率,分区可以理解为表的一个特殊的列。关键字是partitioned。

分区表实际上是将表文件分成多个有标记的小文件方便查询。

二、创建分区表

这里我们将oracle用户scott下的emp表导出的emp.csv文件在Hive中创建分区表存放,按照部门编号进行分区,emp表的字段信息值如下:

empno, ename, job, mgr, hiredate, salary, comm, deptno

7499, ALLEN, SALESMAN, 7698, 1981/2/20, 1600, 300, 30

hive> create table part_emp(

   > empno int,

   > ename string,

   > job string,

   > mgr int,

   > hiredate string,

   > salary float,

   > comm float

   > )

   > partitioned by (deptno int)

   > row format delimited fields terminated by ',';

OK

Time taken: 0.061 seconds

查看分区表,其中# Partition Information为分区信息,有两个分区year和city

hive> desc extended part_emp;

OK

empno                   int                     None                

ename                   string                  None                

job                     string                  None                

mgr                     int                     None                

hiredate                string                  None                

salary                  float                   None                

comm                    float                   None                

deptno                  int                     None                

               

# Partition Information          

# col_name              data_type               comment            

               

deptno                  int                     None                         

     

三、分区表插入数据          

1、通过load命令加载数据

第一次分区信息为deptno=10

hive> load data local inpath  '/root/emp.csv_10' into table part_emp partition(deptno=10);

Copying data from file:/root/emp.csv_10

Copying file: file:/root/emp.csv_10

Loading data to table default.part_emp partition (deptno=10)

[Warning] could not update stats.

OK

Time taken: 2.267 seconds

第二次分区信息为deptno=20

hive>  load data local inpath  '/root/emp.csv_20' into table part_emp partition(deptno=20);

Copying data from file:/root/emp.csv_20

Copying file: file:/root/emp.csv_20

Loading data to table default.part_emp partition (deptno=20)

[Warning] could not update stats.

OK

Time taken: 8.151 seconds

 

第三次分区信息为deptno=30,第三次通过insert的方式加载分区信息

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

hive>  load data local inpath  '/root/emp.csv_30' into table part_emp partition(deptno=30);

Copying data from file:/root/emp.csv_30

Copying file: file:/root/emp.csv_30

Loading data to table default.part_emp partition (deptno=30)

[Warning] could not update stats.

OK

Time taken: 7.344 seconds

 

四、根据分区查询,分区很像是一个特殊的列

hive> select * from part_emp where deptno=10;

7782    CLARK   MANAGER 7839    1981/6/9        2450.0  100.0   10

7839    KING    PRESIDENT       NULL    1981/11/17      5000.0  120.0   10

7934    MILLER  CLERK   7782    1982/1/23       1300.0  133.0   10

8129    Abama   MANAGER 7839    1981/6/9        2450.0  122.0   10

8131    Jimy    PRESIDENT       NULL    1981/11/17      5000.0  333.0   10

8136    Goodle  CLERK   7782    1982/1/23       1300.0  421.0   10

 

查看分区表的分区信息

hive> show partitions part_emp;

deptno=10

deptno=20

deptno=30

五、分区表在HDFS上的存储形式

2018-09-03期 Hive 分区表

一个分区对应一个目录

六、观察分区表查询和普通表查询的执行计划

普通表

hive> explain select * from emp where deptno=10;

ABSTRACT SYNTAX TREE:

 (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME emp))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF)) (TOK_WHERE (= (TOK_TABLE_OR_COL deptno) 10))))

STAGE DEPENDENCIES:

 Stage-1 is a root stage

 Stage-0 is a root stage

STAGE PLANS:

 Stage: Stage-1

   Map Reduce

     Alias -> Map Operator Tree:

       emp

         TableScan

           alias: emp

           Filter Operator

             predicate:

                 expr: (deptno = 10)

                 type: boolean

             Select Operator

               expressions:

                     expr: empno

                     type: int

                     expr: ename

                     type: string

                     expr: job

                     type: string

                     expr: mgr

                     type: int

                     expr: hiredate

                     type: string

                     expr: salary

                     type: float

                     expr: comm

                     type: float

                     expr: deptno

                     type: int

               outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7

               File Output Operator

                 compressed: false

                 GlobalTableId: 0

                 table:

                     input format: org.apache.hadoop.mapred.TextInputFormat

                     output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

 Stage: Stage-0

   Fetch Operator

     limit: -1

分区表:

hive> explain select * from part_emp where deptno=10;

ABSTRACT SYNTAX TREE:

 (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME part_emp))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF)) (TOK_WHERE (= (TOK_TABLE_OR_COL deptno) 10))))

STAGE DEPENDENCIES:

 Stage-0 is a root stage

STAGE PLANS:

 Stage: Stage-0

   Fetch Operator

     limit: -1

     Processor Tree:

       TableScan

         alias: part_emp

         Select Operator

           expressions:

                 expr: empno

                 type: int

                 expr: ename

                 type: string

                 expr: job

                 type: string

                 expr: mgr

                 type: int

                 expr: hiredate

                 type: string

                 expr: salary

                 type: float

                 expr: comm

                 type: float

                 expr: deptno

                 type: string

           outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7

           ListSink


相关内容

热门资讯

我们的“文化体力”是如何被耗尽... 《花束般的恋爱》2026年已经过半,要盘点前半年爆火的流行语,“赛博确诊”一定是其中之一。大批年轻人...
跨国药企正在疯狂买中国创新药,... ► 文 观察者网心智观察所2026年的中国创新药行业,正在发生一个耐人寻味的场景。一边,全球最大的跨...
知名装机up主被曝负债200万... 据都市快报消息:7月21日,深耕高端PC圈的B站UP主(B站、小红书、抖音等平台上传视频的创作者、博...
AI脸让人生理性厌恶?“恐怖谷... 【文/观察者网 夏曼波】最近,“对AI脸感到不适”相关话题频繁上热搜,网友纷纷表示“不适”、“生理性...
要管管国会山股神了?美国参议院... 作者 | 第一财经 樊志菁当地时间周三,美国议会众议院以232票对198票表决结果,通过一项名为《停...
济南一广场突现“知了大军”密密... 近日,有济南市民在社交媒体发布视频称:在当地彩石附近的一处广场地面上密密麻麻聚集了很多类似知了的昆虫...
伊朗军队:打击科威特境内多处美... 当地时间23日,伊朗军队在一份公告中指出,几小时前,伊朗军队对科威特多哈营地的美军弹药和后勤仓库、阿...
洛阳“珠宝大王”年永安沉浮:涉... 澎湃新闻记者 王鑫 实习生 林晨 林宜之河南洛阳的“珠宝大王”年永安淡出公众视野多年后,这个曾把“金...
聚焦核心AI项目,亚马逊裁撤其... 亚马逊在本周三宣布新动态,公司正在裁撤通用人工智能(AGI)部门的部分员工,这标志着亚马逊在持续向人...
上海交大发布第七届“十大科技进... 7月22日,上海交通大学第七届“十大科技进展”在闵行大零号湾成果转化中心发布。本届入选成果包括6项基...