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值會存放到同一個桶


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章