没有分区的apache hive bucketing?

drkbr07n  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(251)

我正在尝试在我的星型模式中使用一个bucket map连接来进行查询。我有一些小维度表和一个大事实表。我会:
通过fk键存储事实表
通过id键确定铲斗尺寸
但是如果我尝试bucket一个没有任何分区的表,在插入数据之后,我只能在表文件夹中看到一个文件(num\u files:1)。

CREATE TABLE user_dimension (
id STRING,
...
name STRING)
CLUSTERED BY (id) INTO 24 BUCKETS;

>> OK

INSERT INTO TABLE user_dimension
SELECT id, name
FROM datasource;

>> Table user_dimension stats: [num_partitions: 0, num_files: 1, num_rows: 478, total_size: 36497, raw_data_size: 36019]
c8ib6hqw

c8ib6hqw1#

设置数据时,请确保

hive.enforce.bucketing=true;

在插入数据之前。
(如果您的维度表非常小,您可能只需要使用常规的map join,而不需要bucketing。当您需要连接两个大表时,bucketing是合适的。)

kcugc4gi

kcugc4gi2#

即使不在配置单元表上进行分区,也可以进行bucketing。

CREATE TABLE bucketed_table(
    firstname VARCHAR(64),
    lastname VARCHAR(64),
    address STRING,
    city VARCHAR(64),
    state VARCHAR(64),
    web STRING
) 
CLUSTERED BY (state) 
SORTED BY (city) 
INTO 32 BUCKETS STORED AS SEQUENCEFILE;

相关问题