📌  相关文章
📜  Google Cloud Platform – BigQuery 中的用户定义函数

📅  最后修改于: 2022-05-13 01:57:03.568000             🧑  作者: Mango

Google Cloud Platform – BigQuery 中的用户定义函数

SQL 具有许多用于对数据执行计算的内置函数。但有时,您的系统可能需要唯一地处理数据,例如字符串或日期值。用户定义的函数是在分析数据时让这些自定义计算触手可及的有效方式。

在本文中,我们将讨论如何在 BigQuery 中创建、存储和共享用户定义的函数。用户定义函数或 UDF允许您使用另一个 SQL 表达式或 JavaScript 创建您定义的可重用函数。这些函数接受输入,执行操作,然后返回一个值作为结果。创建 UDF 后,您可以在查询中或在创建逻辑视图时引用它,就像使用内置函数一样。

让我们看一个示例用例。想象一个应用程序,它从各种来源捕获数据,并且需要清理任何文本字段,然后才能将它们用于分析目的。我们可以编写一个 UDF,我们称之为cleanse_string来解决这个数据清理问题。定义 UDF 的 SQL 表达式做了三件事。它修剪空白,将文本转换为小写,并删除符号。创建和定义 UDF 后,在查询语句的下一部分中,我们可以通过我们的新函数测试三个不同的文本字符串。如果我们运行整个查询。我们将看到每个文本字符串的前后结果。一旦我们对函数的性能感到满意,我们就可以将它添加到分析应用程序数据的查询语句中。

#Standard_SQL

CREATE TEMP FUNCTION cleanse_string (text STRING)
RETURNS STRING
AS (REGEXP_REPLACE (LOWER (TRIM (text)), [a-zA-Z0-9]+', '')); WITH strings AS

(SELECT 'Hello, World!!!' AS text
UNION ALL
SELECT 'I am $Special$ STRING' AS text
UNION ALL
SELECT 'ABC, XYZ AS text)

SELECT text
,cleanse_string(text) AS clean_text
FROM strings;

此示例包括我们所谓的临时 UDF ,这意味着它是在单个查询语句中创建和使用的。但是,BigQuery 还支持持久性 UDF ,它们在特定项目和数据集中定义和存储,但可以在多个查询和项目中重复使用。

让我们进入控制台,看看如何创建、使用和共享持久 UDF。

在查询编辑器中开始。在这里,您将使用 SQL 定义您的 UDF,遵循特定的语法。 CREATE OR REPLACE FUNCTION 表示您想要创建一个持久的 UDF。后面是您希望 UDF 存在的项目 ID 和数据集名称。接下来是函数本身的名称。在这种情况下, cleanse_string 。括号中是一个逗号分隔的所有输入参数列表,其中包含您的 UDF 所需的数据类型。对于 cleanse_string,您只有一个输入,即字符串文本。在下一行,return 子句指定函数将返回的数据类型。现在是时候提供一个定义如何处理输入的 SQL 表达式了。此表达式使用 SQL 函数 TRIM 修剪空格,使用 LOWER 将文本转换为小写。然后它使用正则表达式删除任何符号。左手

现在您已准备好单击运行以创建持久 UDF。您将在左侧导航中的数据集下看到一个填充。选择 UDF 允许您查看、编辑或删除它。展望未来,您可以像使用任何其他 SQL函数一样直接在查询语句中使用此 UDF。您需要使用它的全名来引用它,包括它所在的项目和数据集。事实上,任何对包含 UDF 的数据集具有足够权限的用户(例如 BigQuery 数据查看者角色)也可以在他们的查询中引用它。通过共享数据集,您有可能创建一个组织范围的 UDF 库,这反过来可以确保业务逻辑在整个组织中一致且有效地应用。