如何为 Google BigQuery 上的任何列(标量 UDF)定义函数
How to define functions for any column (scalar UDF) on Google BigQuery
假设我需要定义一个函数,其行为类似于 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 文档并不清楚如何使此类函数适用于字符串、跨任何 table 或列。它看起来像用 bigquery.defineFunction()
定义一个函数,它需要一个输入列名称参数。
据我所知,标量类型 UDF 在 BigQuery 中尚不可用。当前的 UDF 仅 table 明智。因此,您向 UDF 提供 table 并且 UDF 正在处理它 row-by-row 为每个输入行输出 0、1 或多行(取决于您实现的函数)。
我记得提到的 Google 团队成员之一 - 他们致力于在某个时候使标量 UDF 可用
我假设您所讨论的简化示例只是演示您的问题要点的示例,因此我不会为该示例提供实际解决方案(这是对字符串函数的超级简单使用)
2016-08-11 UPDATE
BigQuery Standard 现在支持标量 UDF SQL
请参阅下面的示例
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
假设我需要定义一个函数,其行为类似于 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 文档并不清楚如何使此类函数适用于字符串、跨任何 table 或列。它看起来像用 bigquery.defineFunction()
定义一个函数,它需要一个输入列名称参数。
据我所知,标量类型 UDF 在 BigQuery 中尚不可用。当前的 UDF 仅 table 明智。因此,您向 UDF 提供 table 并且 UDF 正在处理它 row-by-row 为每个输入行输出 0、1 或多行(取决于您实现的函数)。
我记得提到的 Google 团队成员之一 - 他们致力于在某个时候使标量 UDF 可用
我假设您所讨论的简化示例只是演示您的问题要点的示例,因此我不会为该示例提供实际解决方案(这是对字符串函数的超级简单使用)
2016-08-11 UPDATE
BigQuery Standard 现在支持标量 UDF SQL
请参阅下面的示例
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