首页 > 解决方案 > 为什么 hive 中的 CTAS 查询没有按预期给出结果?

问题描述

在这种情况下,我创建了一个包含 100 行的配置单元表“test”。

当我启动 hive 终端并输入以下 SQL

select * from test tablesample(2 percent);

它返回 3 行数据;

但是当我添加“创建表作为选择”时,如下所示。

create table sample as select * from test tablesample(2 percent);

我发现“样本”表中有 100 行。

我不知道为什么。

非常感谢。

标签: hadoophivebigdata

解决方案


文档说这将TABLESAMPLE (n PERCENT) 允许 Hive 获取至少 n% 的数据大小注意它并不一定意味着行数)作为输入。如果我们无法对其进行采样,则 MapReduce 作业的输入将是整个表/分区。我们在 HDFS 块级别执行此操作,以便采样粒度为块大小。例如,如果块大小为 256MB,即使输入大小的 n% 仅为 100MB,您也会得到 256MB 的数据。

不幸的是,它不能保证每次都获取相同的块,总 row_count 可能会有所不同。

我建议增加百分比并添加limit n以保证返回 n 行。或者干脆使用limit n

select * from test tablesample(5 percent) limit 100; --may perform faster

或者

select * from test limit 100;

Limit 当然比 tablesample 效率低,因为 limit 在 reducer 上起作用,也许 tablesample 和 limit 结合起来会允许可接受的性能。


推荐阅读