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)

BigQuery 中用于 Google Analytics 数据的标准 SQL 还是旧版 SQL?

如何在 bigquery 标准 sql 中展平结构?