功能

从BigQuery 中抽取小数据集进行验证时, 常用rand()生成随机数, 再进行排序后选取数据:

原始思路

  1. with rnk_user as (
  2. select rand() as rnk, name, phone
  3. from user
  4. )
  5. select name, phone
  6. from rnk_user
  7. order by rnk
  8. limit 10000

改进版

利用where条件, 但是由于rand()是随机数, 不能完全做到比例, 所以多选一部分(20%) 然后用LIMIT进行限定:

  1. select name, phone
  2. from user
  3. where rand() < 12000/{lines of table}
  4. limit 10000

最终版

  1. select name, phone
  2. from user
  3. order by rand()
  4. limit 10000

参考资料

  1. Sample in BigQuery