没有分区的 Hive 存储桶



我正在尝试使用存储桶映射联接来查询我的星型架构。我有一些小维度表和一个大事实表。我会:

  • 按事实数据表的 FK 键对事实数据表进行存储桶
  • 按其 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]

对数据进行分桶时,请确保将

hive.enforce.bucketing=true;

在插入数据之前。

(如果您的维度表非常小,您可能只使用常规映射联接,而无需存储桶。当您需要联接 2 个大表时,存储桶是合适的。

即使

没有对 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;

相关内容

  • 没有找到相关文章

最新更新