为什么蜂巢中的CTAS查询没有得到预期的结果?

时间:2019-03-15 09:48:38

标签: hadoop hive bigdata

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

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

select * from test tablesample(2 percent);

它返回3行数据;

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

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

我发现表“ sample”中有100行。

我不知道为什么。

非常感谢。

1 个答案:

答案 0 :(得分:0)

DocumentationTABLESAMPLE (n PERCENT)将允许Hive提取至少n%的数据大小注意,它不一定意味着行数< / strong>)作为输入。如果我们无法对其进行采样,则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在减速器上起作用,也许tablesample和limit的组合都可以使性能令人满意。