如何在 hive 中获取 100K 用户的随机样本及其所有交易?

How to obtain a random sample of 100K users with all their transactions in hive?

我有一个庞大的数据集,其中包含数百万用户的信息及其 1 年的购买记录。有没有办法从这些数据中创建 100K 用户的随机样本(保留他们所有的个人购买)?由于一个用户可以进行多次购买,因此样本将包含超过 10 万条记录。 我能够找到 rand() 函数,但它没有为我提供用户的所有记录。

我试过这个查询:

select *
from mytable
where rand()< 0.025 and mydate between '20140101' and '20141231'
distribute by rand()
sort by rand()
limit 100000

此结果仅生成 100k 个随机记录,而不是 所有 这 100k 个用户的记录。

关于如何编写配置单元查询以获得此结果有什么建议吗?

您应该先创建 table 个 100,000 个随机用户 ID:

CREATE table Random_Users AS 
  Select * From (Select distinct userId From my table) users 
  where rand()< 0.025 limit 100000;

那你可以做

Select mytable.* From mytable m JOIN random_users r ON (m.userId = r.userId);