Hive 分区和存储桶示例
表、分区和存储桶是 Hive 数据建模的一部分。
什么是分区?
Hive 分区是一种将表组织成分区的方法,通过根据分区键将表分成不同的部分。
当表具有一个或多个分区键时,分区很有用。分区键是确定数据在表中的存储方式的基本元素。
例如 -
“客户有一些电子商务数据,这些数据属于印度业务,其中每个州(38 个州)的业务都作为一个整体提及。如果我们将州列作为分区键并对整个印度数据进行分区,我们可以得到分区数(38 个分区),该数等于印度的州数(38 个)。这样,每个州的数据都可以在分区表中单独查看。
分区的示例代码片段
- 创建所有州的表格
create table all states(state string, District string,Enrolments string) row format delimited fields terminated by ',';
- 将数据加载到创建的表所有状态中
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
- 分区表的创建
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
- 对于分区,我们必须设置此属性
set hive.exec.dynamic.partition.mode=nonstrict
- 将数据加载到分区表中
INSERT OVERWRITE TABLE state_part PARTITION(state) SELECT district,enrolments,state from allstates;
- 基于状态作为分区键的分区表的实际处理和形成
- HDFS 存储中将有 38 个分区输出,文件名为状态名称。我们将在此步骤中检查这一点
以下屏幕截图将显示上述代码的执行情况
从上面的代码中,我们做以下事情
- 创建包含 3 个列名(例如州、区和入学人数)的州表
- 将数据加载到表 all states 中
- 创建以状态为分区键的分区表
- 在此步骤中将分区模式设置为非严格(此模式将激活动态分区模式)
- 将数据加载到分区表state_part中
- 基于状态作为分区键的分区表的实际处理和形成
- HDFS 存储中将有 38 个分区输出,文件名为状态名称。我们将在此步骤中检查这一点。在此步骤中,我们将在 HDFS 中看到 38 个分区输出
什么是 Bucket?
Hive 中的 Bucket 用于将 Hive 表数据隔离到多个文件或目录中。它用于高效查询。
- 该分区中存在的数据可以进一步划分为存储桶
- 该划分是根据我们在表中选择的特定列的哈希值执行的。
- Bucket 在后端使用某种形式的哈希算法来读取每条记录并将其放入 Bucket 中
- 在 Hive 中,我们必须使用 设置.hive.enforce.bucketing=true;
步骤1) 如下所示创建Bucket。
从上面的屏幕截图
- 我们正在创建 sample_bucket,其列名包括 first_name、job_id、department、salary 和 country
- 我们在这里创建 4 个存储桶。
- 一旦数据自动加载,就会将数据放入 4 个存储桶中
步骤2) 将数据加载到表示例存储桶中
假设已在 Hive 系统中创建了“员工表”。在此步骤中,我们将看到将员工表中的数据加载到表示例存储桶中。
在我们开始将员工数据移入存储桶之前,请确保它包含 first_name、job_id、department、salary 和 country 等列名。
这里我们将数据从员工表加载到示例存储桶中。
步骤3)显示步骤 4 中创建的 1 个 bucket
从上面的截图中,我们可以看到员工表中的数据被转移到步骤 4 中创建的 1 个存储桶中。