BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数
Posted
技术标签:
【中文标题】BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数【英文标题】:BigQuery: Standard SQL and the PERCENTILE_CONT() function 【发布时间】:2017-02-03 10:24:13 【问题描述】:我正在尝试使用 BigQuery 标准 SQL 编写查询(因为我们想要利用一些功能)。
标准 SQL 中是否有一个等效的函数用于 PERCENTILE_CONT(),因为它似乎只在使用 Legacy SQL 选项时才受支持?
WITH
CTE_EmployeeData AS (
SELECT
E.JobID,
E.FB1
FROM
ZA_Month_End_190.Employee_Primary_Data E
WHERE
JobID IN UNNEST([111,1414]) /* For these specidifc jobs */
),
CTE_Stats AS (
SELECT
JobID,
COUNT(*) SampleSize,
SUM(CASE WHEN FB1 > 0 THEN 1 ELSE 0 END) WtdSampleSize_FB1,
CAST(SUM(FB1) AS INT64) WtdSum_FB1
FROM
CTE_EmployeeData
GROUP BY
JobID
),
CTE_Percentiles AS (
SELECT
ED.JobID,
CASE
WHEN S.SampleSize > 10
THEN PERCENTILE_CONT(0.25) OVER (PARTITION BY ED.JobID ORDER BY ED.FB1 DESC) [Percentile1]
ELSE 0
END [FB1_Percentile1]
FROM
CTE_Stats S
INNER JOIN CTE_EmployeeData ED ON S.JobID = ED.JobID
)
SELECT
*
FROM
CTE_Percentiles
【问题讨论】:
这是一项正在进行的工作,但尚不可用。你能提供一个你正在尝试做什么的例子吗?例如,可以通过计算分位数来模拟相同的功能。 嗨,Elliott,我已经用一个例子更新了这个问题 - 如果它足够了,请告诉我。 【参考方案1】:BigQuery 现在似乎支持标准 SQL 中的 PERCENTILE_CONT(variable, quantile)
,尽管目前没有记录。
更新:Now documented - 谢谢托比
【讨论】:
请务必取消选中查询选项中的“使用旧版 SQL”,否则您将收到以下错误消息:PERCENTILE_CONT must have 1 argument, found 2
【参考方案2】:
另一个选项可能是使用 APPROX_QUANTILES();注意此结果是所需分位数的数组。
APPROX_QUANTILES([DISTINCT] expression, number [IGNORE|RESPECT NULLS])
参考:https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#approx_quantiles
【讨论】:
以上是关于BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数
Google BigQuery 中的 TIMESTAMP 和标准 SQL
寻找 BigQuery 标准 SQL 教程、示例、书籍的新手,
在 BigQuery 中展平嵌套和重复的结构(标准 SQL)