没有分区的Hive Bucketing?

时间:2014-02-10 13:41:25

标签: apache hadoop hive

我正在尝试在我的星型架构中使用桶地图连接进行查询。 我有一些小尺寸表和一个大事实表。 我会:

  • 通过其FK密钥对事实表进行存储
  • 存储区维度ID ID

但是,如果我尝试在没有任何分区的情况下对表进行存储,则在插入数据( num_files:1 )之后,我只能在表文件夹中看到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]

2 个答案:

答案 0 :(得分:2)

在分组数据时,请务必设置

hive.enforce.bucketing=true;
插入数据之前

(如果维度表非常小,您可以直接使用常规地图连接,而无需进行分段。当您需要连接2个大型表时,Bucketing是合适的。)

答案 1 :(得分:0)

即使没有在Hive表上进行分区,也可以进行暂停。

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;