如果我想从oracle数据库中的表中获取行的“随机”样本,则可以查询
select * from mytable sample(1)
并获得1%的回报
Postgres中有等效的命令吗?
如果9.5或更高,可以使用TABLESAMPLE
:
TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ]
根据文档:
table_name之后的TABLESAMPLE子句指示应使用指定的sample_method来检索该表中行的子集。该采样先于其他过滤器(例如WHERE子句)的应用。标准的PostgreSQL发行版包括BERNOULLI和SYSTEM这两种采样方法,可以通过扩展将其他采样方法安装在数据库中。
BERNOULLI和SYSTEM采样方法每个都接受一个参数,该参数是要采样的表的分数,以0到100之间的百分比表示。该参数可以是任何实值表达式。(其他采样方法可能会接受更多或不同的参数。)这两种方法各自返回表的随机选择样本,该样本大约包含表行的指定百分比。BERNOULLI方法扫描整个表,并以指定的概率独立选择或忽略单个行。SYSTEM方法执行块级采样,每个块都有指定的机会被选中;返回每个选定块中的所有行。当指定较小的采样百分比时,SYSTEM方法比BERNOULLI方法要快得多,
可选的REPEATABLE子句指定用于在采样方法内生成随机数的种子数或表达式。种子值可以是任何非空浮点值。如果同时没有更改表,则两个指定了相同种子和参数值的查询将选择该表的相同样本。但是,不同的种子值通常会产生不同的样本。如果未给出REPEATABLE,则为每个查询选择一个新的随机样本。请注意,某些附加采样方法不接受REPEATABLE,并且每次使用时都会产生新的采样。
链接:http://www.postgresql.org/docs/current/static/sql-select.html
有关介绍该功能的博客的详细信息:http : //blog.2ndquadrant.com/tablesample-in-postgresql-9-5-2/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句