为什么在hive中CTAS查询没有按预期给出结果?

问题描述 投票:0回答:1

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

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

select * from test tablesample(2 percent);

它返回3行数据;

但是当我在下面添加“create table as Select”时。

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

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

我不知道为什么。

非常感谢。

hadoop hive bigdata
1个回答
0
投票

Documentation表示,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;

当然,限制的效率低于tablesample,因为限制适用于reducer,也许tableample和limit的组合将允许可接受的性能。

© www.soinside.com 2019 - 2024. All rights reserved.