HiveQL DDL—分桶

文章目录

概述

  除了分区外,分桶是另一种提高查询性能的技术。不同于分区,每个桶对应一个HDFS中的文件分片。Hive会按照分桶字段将数据hash到指定数量的桶中,分桶字段值相同的记录会被分配到同一个桶中。分桶字段使用关键字 CLUSTERED BY 指定。相比于分区,分桶字段是真实表中的字段,而分区字段只是指的是目录。通过使用分桶技术,Hive可以轻松高效的执行抽样、bucket-side join 及 map-side join 等操作。

示例

  测试数据

$ vim  employee_id.txt 
Michael|2|Montreal,Toronto|Male,30|DB:80|Product:Developer^DLead
Will|2|Montreal|Male,35|Perl:85|Product:Lead,Test:Lead
Shelley|3|New York|Female,27|Python:80|Test:Lead,COE:Architect
Lucy|4|Vancouver|Female,57|Sales:89,HR:94|Sales:Lead

  创建表 employee_id

CREATE TABLE employee_id (
name STRING,
employee_id INT,
work_place ARRAY<STRING>,
gender_age STRUCT<gender:STRING,age:INT>,
skills_score MAP<STRING,INT>,
depart_title MAP<STRING,ARRAY<STRING>>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';

  加载数据

> LOAD DATA INPATH  '/tmp/employee_id.txt' OVERWRITE INTO TABLE employee_id;

  创建桶表:为表创建了2个桶,也就是数据文件会被拆分为2个文件。创建合适数量的桶数是非常重要的,需要避免每个桶有太多或太少的数据。一个不错的选择是,一个桶大概有2个block大小的数据,如512MB。尽可能将桶的数量定义为2的N次方。

> CREATE TABLE employee_id_buckets (
name STRING,
employee_id INT,
work_place ARRAY<STRING>,
gender_age STRUCT<gender:string,age:int>,
skills_score MAP<string,int>,
depart_title MAP<string,ARRAY<string >>
)
CLUSTERED BY (employee_id) INTO 2 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';

  向桶表插入数据
  说明:不能使用LOAD DATA语句将数据加载到桶表中,因为它无法按照元数据解析数据。因此,只能使用INSERT语句将数据插入到桶表中。

> INSERT OVERWRITE TABLE employee_id_buckets SELECT * FROM employee_id;

  查看桶表在HDFS中的数据文件

$ hadoop fs -ls /tmp/hive/employee_id_buckets/
Found 2 items
-rw-r--r--   3 hadoop hadoop        173 2019-09-27 16:43 /tmp/hive/employee_id_buckets/000000_0
-rw-r--r--   3 hadoop hadoop         63 2019-09-27 16:43 /tmp/hive/employee_id_buckets/000001_0

  补充:配置说明,在Hive2.x 之前,参数 hive.enforce.bucketing 的默认值为false。在向桶表插入数据时,需要先将该参数设置为true,使Hive按照定义的分桶规则强制分桶。在Hive2.x之后,该参数被移除了,Hive默认就会强制分桶的,也就无需在设置该参数了。

参考
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
书籍 Apache Hive Essentials Second Edition (by Dayong Du) Chapter 3

发布了57 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/102149680