【发布时间】:2020-07-23 00:44:43
【问题描述】:
我希望通过 BigQuery 中的新函数复制 Oracle 中可用的 width_bucket 函数。该函数根据您在最小值和最大值之间指定的数字创建等宽桶。例如,width_bucket(user_count, 0, 35, 10) 将创建 10 个相等的桶,例如 0 - 3.5、3.5 - 7 等,并告诉您 user_count 属于哪个桶。任何帮助将不胜感激!
Oracle 文档 - https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions214.htm
这是我所拥有的,我相信这是可行的,但我想得到它,所以如果可能的话,我不必引用表格来生成行号。
CREATE OR REPLACE FUNCTION functions.widthBucket(
value NUMERIC,
minValue NUMERIC,
maxValue NUMERIC,
buckets INT64)
AS ((
SELECT resultBucket
FROM (
SELECT CASE
WHEN value >= (minValue * bucketNumber) + ((maxValue/buckets) * (bucketNumber - 1))
AND value < (maxValue/buckets) * bucketNumber
THEN bucketNumber
WHEN value = maxValue and bucketNumber = buckets
THEN bucketNumber
ELSE -1
END as resultBucket
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY '') as bucketNumber
FROM project.dateTable
) x
WHERE bucketNumber <= buckets) x
WHERE resultBucket != -1
));
【问题讨论】:
-
您能否提供您计划如何使用此类 UDF 的示例 - 带有一些用于测试的虚拟数据 :o) 询问,因为我似乎不明白该表在函数内部做什么
标签: google-bigquery