在这种情况下,我创建了一个包含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行。
我不知道为什么。
非常感谢。
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的组合将允许可接受的性能。