Google bigquery 如何在Google BigQuery上为任何列(标量UDF)定义函数

Google bigquery 如何在Google BigQuery上为任何列(标量UDF)定义函数,google-bigquery,user-defined-functions,Google Bigquery,User Defined Functions,假设我需要定义一个行为类似于UPPER(string)的函数,我们可以称之为FIRSTCHAR(string),它获取字符串的第一个字符。 因此,我想将SQL设置为: SELECT FIRSTCHAR(middle_name) AS middle_name_first_char, FIRSTCHAR(last_name) AS last_name_first_char FROM clients 阅读BigQueryUDF文档并不清楚如何使这些函数在字符串、任何表或列上工作。似乎要用bigqu

假设我需要定义一个行为类似于
UPPER(string)
的函数,我们可以称之为
FIRSTCHAR(string)
,它获取字符串的第一个字符。 因此,我想将SQL设置为:

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

阅读BigQueryUDF文档并不清楚如何使这些函数在字符串、任何表或列上工作。似乎要用
bigquery.defineFunction()
定义一个函数,它需要一个输入列名参数。

据我所知,bigquery中还没有标量类型的UDF。当前的自定义项仅适用于表。所以您将表提供给UDF,UDF正在逐行处理它,为每个输入行输出0、1或多行(取决于您实现的函数)。
我记得有一位谷歌团队成员提到过——他们致力于在某个时候提供标量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自定义项

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 

谢谢你的反馈!是的,这是一个简化的例子,我需要的包括几个正则表达式,我需要在不同的数据集上应用它们。当然,我会这样做,如果出现其他选项,请稍等。谢谢你,米哈伊尔!