Seleccionar filas aleatorias en PostgreSQL (RANDOM y TABLESAMPLE)

En ocasiones es necesario obtener filas aleatorias de una tabla, sobre todo cuando se realizan pruebas a los datos  en cuestión. PostgreSQL permite obtener datos aleatorios, inicialmente se podía hacer con la funciones RANDOM(), pero luego de la versión 9.5 agregaron el estándar TABLESAMPLE SQL 2003 para dicha actividad, siguiendo con la política de PostgreSQL de evolución y apegándose al estándar definido. Pues veamos en que consiste:

En el ejemplo se trabajará con la tabla customers  que tienen 20000 registros

Obtener aproximadamente el 50% de los datos de la tabla, antes de la versión 9.5


dell=# SELECT count(*) FROM customers where RANDOM() <=0.5;
count
-------
10009
(1 fila)

Obtener aproximadamente el 50% de los datos de la tabla, desde versión 9.5 se utiliza TABLESAMPLE, existen dos métodos SYSTEM y BERNOULLI, los cuales puede verse sus especificaciones en la documentacion oficial al respecto, que según la misma el método SYSTEM resulta más rápido que el BERNOULLI, pero el BERNOULLI es más disperso en la muestra.

 


dell=# SELECT count(*) FROM customers TABLESAMPLE SYSTEM(50);
count
-------
9766
(1 fila)

dell=# SELECT count(*) FROM customers TABLESAMPLE BERNOULLI(50);
count
-------
10061
(1 fila) 

Como se puede observar se permite obtener datos aleatorios de una tabla en PostgreSQL, destacar además que la solución del estándar TABLESAMPLE es más rápida que la del RANDOM, pero bueno usted es libre de elegir la solución a utilizar.

Nos vemos en otra 😉

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s