在选择查询中使用 hive 分桶

Posted

技术标签:

【中文标题】在选择查询中使用 hive 分桶【英文标题】:Using hive bucketing in select query 【发布时间】:2014-05-08 14:16:57 【问题描述】:

我有一个存储在 userId 上的 hive 表,我的选择查询在 where 子句中包含 userId,但 hive 正在执行全表扫描。 hive.enforce.bucketing 是真的 为什么 hive 在这种情况下不利用分桶,是否有任何配置可以启用它?

表结构

userId int,
name int,
address String,
cell int,
......
......
......
......
CLUSTERED BY  (userId) SORTED BY (userId) INTO 20 BUCKETS

选择查询

select cell from <table> where userId=<userId>

【问题讨论】:

【参考方案1】:
select cell from <table> TABLESAMPLE(BUCKET <n> OUT OF 20 ON userId) usertable where userId = <userId>

【讨论】:

+1 有趣的答案!但我不明白这有什么用:你需要确切地知道每个桶的内容是什么,指定一个不同的 。您能否提供一个有用的示例?

以上是关于在选择查询中使用 hive 分桶的主要内容,如果未能解决你的问题,请参考以下文章

分区表和分桶表

在 Hive 中,分区快还是分桶快?

Hive的分区和分桶

未在 Hive 中优化分桶

Hive表的分区与分桶

Hive 教程-分区表与分桶表