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