20180904期 Hive数据模型-桶表

一、概述

1、桶表是对数据进行哈希取值,然后放到不同文件中存储。

2、数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。

3、物理上,每个桶就是表(或分区)目录里的一个文件,一个作业产生的桶(输出文件)和reduce任务个数相同。

4、桶表专门用于抽样查询,是很专业性的,不是日常用来存储数据的表,需要抽样查询时,才创建和使用桶表。

二、创建桶表

这里按照ename来创建桶表,分五个Bucket

hive> create table emp_bucket(

   > empno int,

   > ename string,

   > job string,

   > mgr int,

   > hiredate string,

   > salary float,

   > comm float,

   > deptno int

   > )

   > CLUSTERED  by (ename) into 5 buckets

   > row format delimited fields terminated by ',';

OK

Time taken: 2.856 seconds

三、往桶表中插入数据

特别注意:执行数据插入前,需要设置以下参数

set hive.enforce.bucketing=true;

这里将emp表中的数据插入emp_bucket表

hive> insert into table emp_bucket select * from emp;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

MapReduce Jobs Launched:

Job 0: Map: 1   Cumulative CPU: 0.67 sec   HDFS Read: 1438 HDFS Write: 1313 SUCCESS

Total MapReduce CPU Time Spent: 670 msec

hive> select * from emp_bucket;

OK

7369    SMITH   CLERK   7902    1980/12/17      800.0   NULL    20

7499    ALLEN   SALESMAN        7698    1981/2/20       1600.0  300.0   30

7521    WARD    SALESMAN        7698    1981/2/22       1250.0  500.0   30

7566    JONES   MANAGER 7839    1981/4/2        2975.0  NULL    20

7654    MARTIN  SALESMAN        7698    1981/9/28       1250.0  1400.0  30

7698    BLAKE   MANAGER 7839    1981/5/1        2850.0  NULL    30

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

7788    SCOTT   ANALYST 7566    1987/4/19       3000.0  NULL    20

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

7844    TURNER  SALESMAN        7698    1981/9/8        1500.0  0.0     30

四、查看桶表在HDFS中的存放形式

[root@hadoop-server01 ~]# hdfs dfs -ls /user/hive/warehouse/emp_bucket/

-rw-r--r--   1 root supergroup         92 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000000_0

-rw-r--r--   1 root supergroup        189 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000001_0

-rw-r--r--   1 root supergroup        378 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000002_0

-rw-r--r--   1 root supergroup        282 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000003_0

-rw-r--r--   1 root supergroup        372 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000004_0

可以看出,桶表生成的数据为5各个文件,一个桶表对应一个文件,相同Hash值会存放到同一个桶


猜你喜欢

转载自blog.51cto.com/2951890/2169947