tutorial que pricing precios google espaƱol data bigquery big google-cloud-platform google-bigquery

google-cloud-platform - que - google cloud platform precios



Muestreo aleatorio en Google BigQuery (3)

Acabo de descubrir que la función RAND (), aunque no está documentada, funciona en BigQuery. Pude generar una muestra (aparentemente) aleatoria de 10 palabras del conjunto de datos de Shakespeare usando:

SELECT word FROM (SELECT rand() as random,word FROM [publicdata:samples.shakespeare] ORDER BY random) LIMIT 10

Mi pregunta es: ¿Hay alguna desventaja en el uso de este enfoque en lugar del método HASH () definido en la sección "Ejemplos avanzados" del manual de referencia? https://developers.google.com/bigquery/query-reference


¡Es bueno saber que RAND () está disponible!

En mi caso, necesitaba un tamaño de muestra predefinido . En lugar de necesitar saber el número total de filas y hacer el tamaño de muestra de la división sobre las filas totales, estoy usando la siguiente consulta:

SELECT word, rand(5) as rand FROM [publicdata:samples.shakespeare] order by rand #Sample size needed = 10 limit 10

Resumiendo, uso ORDER BY + LIMIT para ramdomize y luego extraer un número definido de muestras.


Buen trabajo encontrándolo :). Solicité la función recientemente, pero aún no ha llegado a la documentación.

Yo diría que la ventaja de RAND () es que los resultados variarán, mientras que HASH () seguirá brindando los mismos resultados para los mismos valores (no garantizados en el tiempo, pero se entiende la idea).

En caso de que quiera la variabilidad que trae RAND () mientras obtiene resultados consistentes, puede sembrarlo con un número entero, como en RAND (3).

Sin embargo, tenga en cuenta que el ejemplo que pegó está haciendo un tipo completo de los valores aleatorios: para entradas suficientemente grandes, este enfoque no se escalará.

Un enfoque escalable, para obtener alrededor de 10 filas aleatorias:

SELECT word FROM [publicdata:samples.shakespeare] WHERE RAND() < 10/164656

( donde 10 es el número aproximado de resultados que quiero obtener, y 164656 el número de filas que tiene )

actualización estándarSQL:

#standardSQL SELECT word FROM `publicdata.samples.shakespeare` WHERE RAND() < 10/164656

o incluso:

#standardSQL SELECT word FROM `publicdata.samples.shakespeare` WHERE RAND() < 10/(SELECT COUNT(*) FROM `publicdata.samples.shakespeare`)


Un consejo adicional para hacerlo aún más simple: puede ordenar por la función en sí, es decir:

selecciona x de y ordena por rand () límite 100

=> Muestra de 100