带有Hive的随机样本表,但包括匹配的行

时间:2015-07-02 16:56:56

标签: hive hiveql random-sample

我有一个包含userID列和其他用户变量列的大表,我想使用Hive根据他们的userID提取用户的随机样本。此外,有时这些用户将在多行上,如果随机选择的userID包含在表的其他部分中,我也想提取这些行。

我看了the Hive sampling documentation,我发现这样的事情可以用来提取1%的样本:

SELECT * FROM source 
TABLESAMPLE (1 PERCENT) s;

但我不确定如何添加约束,我希望选择那些1%userID的所有其他实例。

1 个答案:

答案 0 :(得分:3)

您可以使用rand()随机分割数据,并在您的类别中使用适当的userid百分比。我推荐使用rand(),因为将种子设置为某些东西可以使结果重复。

select c.*
from 
(select userID
, if(rand(5555)<0.1, 'test','train') end as type
    from
    (select userID 
    from mytable 
    group by userID
    ) a
) b
right outer join
(select *
from userID
) c
on a.userid=c.userid
where type='test'
;

这是为实体级建模目的而设置的,这就是为什么我要测试和训练类型的原因。