【问题标题】:How to define functions for any column (scalar UDF) on Google BigQuery如何在 Google BigQuery 上为任何列(标量 UDF)定义函数
【发布时间】:2016-05-03 05:23:35
【问题描述】:

假设我需要定义一个具有类似UPPER(string) 行为的函数,我们可以将其称为FIRSTCHAR(string),它获取字符串的第一个字符。 所以我想让 SQL 像这样:

SELECT FIRSTCHAR(middle_name) AS middle_name_first_char, 
FIRSTCHAR(last_name) AS last_name_first_char FROM clients

阅读 BigQuery UDF 文档并不清楚如何使此类函数适用于字符串、任何表或列。看起来像用bigquery.defineFunction() 定义一个函数,它需要一个输入列名参数。

【问题讨论】:

    标签: google-bigquery user-defined-functions


    【解决方案1】:

    据我所知,标量类型 UDF 在 BigQuery 中尚不可用。当前的 UDF 仅适用于表格。因此,您向 UDF 提供表,UDF 正在逐行处理它,为每个输入行输出 0、1 或多行(取决于您实现的函数)。
    我记得其中一位 Google 团队成员提到过 - 他们致力于在某个时候提供标量 UDF

    我假设您所讨论的简化示例只是说明您的问题点的示例,因此我没有为此示例提供实际解决方案(这是对字符串函数的超级简单使用)

    2016-08-11 更新

    BigQuery 标准 SQL 现在支持标量 UDF
    请参阅下面的示例

    JS UDF

    CREATE TEMPORARY FUNCTION FIRSTCHAR(word STRING)
      RETURNS STRING
      LANGUAGE js
      AS "return word.substring(0, 1);";
    SELECT 
      FIRSTCHAR(middle_name) AS middle_name_first_char, 
      FIRSTCHAR(last_name) AS last_name_first_char 
    FROM clients 
    

    SQL UDF

    CREATE TEMPORARY FUNCTION FIRSTCHAR(word STRING)
      RETURNS STRING
      AS (SUBSTR(word, 0, 1));
    
    SELECT 
      FIRSTCHAR(middle_name) AS middle_name_first_char, 
      FIRSTCHAR(last_name) AS last_name_first_char 
    FROM clients 
    

    【讨论】:

    • 感谢您提供反馈!是的,这是一个简化的例子,我需要包括几个我需要应用于不同数据集的正则表达式。
    • 当然可以,如果出现其他选项,请稍等。谢谢米哈伊尔!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多