我在BigQuery中有一个表。我有一个字符串列表示一个唯一的ID(uid)。我只想通过只取得一部分uid(比如说1/100)来过滤这张表的一个样本。 所以我的想法是做这样的事情采样数据:BigQuery - 根据一些哈希标准对数据进行分区
if(ABS(HASH(uid)) % 100 == 0) ...
的问题是,这将在1/100的比例只有散列值的分布是均匀的实际过滤。因此,为了确认,我想生成如下表:
(n goes from 0 to 99)
0 <number of rows in which uid % 100 == 0>
1 <number of rows in which uid % 100 == 1>
2 <number of rows in which uid % 100 == 2>
3 <number of rows in which uid % 100 == 3>
..等
如果我看到每一行的数字是相同的数量级,那么我的假设是正确。
任何想法如何创建这样的查询,或者采取另一种方式做抽样?
你甚至可以把RAND部分放在WHERE子句中: SELECT * FROM table WHERE RAND()<0.01 – 2014-10-21 06:00:18
RAND对数据的随机部分很有用。但是,如果我寻求一致性(每次查询同一个表时在同一分区中都有相同的记录),它仍然可以工作吗? – 2014-10-21 06:36:08
谢谢大家!然而,作为后续,我发现我将无法使用hash()或rand()。原因是相同的会话ID出现在多种类型中,我需要从所有类型中筛选出一个特定的ID。这意味着我需要一个函数,给定相同的会话ID将产生相同的整数(我将通过执行%100来进行抽样),以便过滤对任何表中的给定ID都是确定性的。 – 2014-10-21 06:56:46