“all\u members”是配置单元中的一个表,有10m行和1列:“membership\u nbr”。我想取样3000行。我就是这么做的:
hive>create table sample_members as select * from all_members limit 1;
hive>insert overwrite table sample_members select membership_nbr from all_members tablesample(3000 rows);
hive>select count(*) from sample_members;
好的45000
如果我用300行替换3000行,结果不会改变。我做错什么了吗?
1条答案
按热度按时间mv1qrgav1#
表采样使用
tablesample(3000 rows)
它不会从整个表中获取3000行,而是从每个输入拆分中获取3000行。因此,您的查询可能会运行15个Map器。因此,每个Map器将获取3000行。共3000*15=45000行。另外,如果您将3000行更改为300行,则在采样后将获得4500行作为输出。
所以,根据你的要求你必须
tablesample(200 rows)
. 因此,每个Map器将获取200行。最后,15个Map器将获取3000个采样行。有关各种类型的采样,请参阅以下链接:https://cwiki.apache.org/confluence/display/hive/languagemanual+sampling