Hive 带扣列上的Apache配置单元查询

Hive 带扣列上的Apache配置单元查询,hive,bucket,Hive,Bucket,我在时间段列上创建了一个带扣的表,它的值从0到23,时间段列的数据类型为int 我已经创建了24个bucket,并在bucked表中加载10000000行(6GB的数据) 同时,我使用相同的数据集创建了一个普通的无扣表 后来我查询了带扣的桌子和不带扣的桌子,如下所示 select * from bucketed_table where timeslot = 15; select * from non-bucketed_table where timeslot = 15; 两个查询占用的时间几

我在时间段列上创建了一个带扣的表,它的值从0到23,时间段列的数据类型为int

我已经创建了24个bucket,并在bucked表中加载10000000行(6GB的数据)

同时,我使用相同的数据集创建了一个普通的无扣表

后来我查询了带扣的桌子和不带扣的桌子,如下所示

select * from bucketed_table where timeslot = 15;

select * from non-bucketed_table where timeslot = 15;
两个查询占用的时间几乎相同

我假设带扣的桌子比不带扣的桌子表现得更好


如果我做错了什么,或者我的假设完全错了,有人能告诉我吗?

据我所知,带扣桌子只有在与其他带扣桌子连接的情况下才能表现得更好。如果我们只查询带扣的列,将不会有任何性能提升,因为在这种情况下,带扣的表和非带扣的表都会扫描整个表(数据文件),这就是为什么在这两种情况下启动相同数量的映射器的原因,据我所知,带扣的表只有在与其他带扣的表连接时才会表现得更好。如果我们只查询带扣的列,将不会有任何性能提高,因为在这种情况下,带扣的表和非带扣的表都会扫描整个表(数据文件),这就是为什么在这两种情况下启动相同数量的映射器的原因

您对该文件使用的是哪种格式?您是否检查了每个表中创建了多少物理文件?您是否知道,除非设置
hive.exforce.bucketing
cf,否则INSERT命令不会自动遵守bucketing规范?我对两个表都使用简单文本格式,我还将hive.exforce.bucketing设置为true;在将数据插入带扣的表格和选中的表格时,在插入数据时,在带扣的表格中创建了24个文件。启动了24个还原程序来创建不同的桶文件。Hive并行运行了多少个映射程序来读取非带扣的表格?因为对于256MB的块大小,单个6GB文件意味着24个块可以由24个映射器并行读取。所以它应该和带扣的桌子一样快,它的读数只有1块。。。但是要消耗24倍的CPU和24倍的I/O。这完全取决于你所说的“更好”是什么意思!为带扣和非带扣表格创建了25个映射器,您对该文件使用哪种格式?您是否检查了每个表中创建了多少物理文件?您是否知道,除非设置
hive.exforce.bucketing
cf,否则INSERT命令不会自动遵守bucketing规范?我对两个表都使用简单文本格式,我还将hive.exforce.bucketing设置为true;在将数据插入带扣的表格和选中的表格时,在插入数据时,在带扣的表格中创建了24个文件。启动了24个还原程序来创建不同的桶文件。Hive并行运行了多少个映射程序来读取非带扣的表格?因为对于256MB的块大小,单个6GB文件意味着24个块可以由24个映射器并行读取。所以它应该和带扣的桌子一样快,它的读数只有1块。。。但是要消耗24倍的CPU和24倍的I/O。这完全取决于你所说的“更好”是什么意思!为带扣和非带扣表格创建25个映射器