bigquery-utils icon indicating copy to clipboard operation
bigquery-utils copied to clipboard

random_value UDF result is re-used by query optimizer when invoked in subquery

Open danieldeleo opened this issue 5 years ago • 0 comments

BigQuery query optimizer will invoke once and re-use the output of random_value UDF if the UDF is called within a SQL subquery.

https://github.com/GoogleCloudPlatform/bigquery-utils/blob/master/udfs/community/random_value.sql

Possible Solution:

random_value(arr ANY TYPE, col ANY TYPE) AS ( ( SELECT val[OFFSET(0)] FROM( SELECT [value, col] AS val FROM UNNEST(arr) value ORDER BY RAND() LIMIT 1 ) ));

Caveat: the second input arg must have the same type as the array elements in first arg

danieldeleo avatar Apr 24 '20 19:04 danieldeleo