Google bigquery 大查询SQL UDF结构是否允许像java脚本UDF中那样的复杂逻辑?

Google bigquery 大查询SQL UDF结构是否允许像java脚本UDF中那样的复杂逻辑?,google-bigquery,Google Bigquery,通过使用JavaScript,您可以执行以下操作: CREATE TEMPORARY FUNCTION customGreeting(a STRING) RETURNS STRING LANGUAGE js AS """ var d = new Date(); if (d.getHours() < 12) { return 'Good Morning, ' + a + '!'; } else { return 'Good Evening, ' + a + '!'

通过使用JavaScript,您可以执行以下操作:

CREATE TEMPORARY FUNCTION customGreeting(a STRING)
RETURNS STRING
LANGUAGE js AS """
  var d = new Date();
  if (d.getHours() < 12) {
    return 'Good Morning, ' + a + '!';
  } else {
    return 'Good Evening, ' + a + '!';
  }

""";
创建临时函数customGreeting(字符串)
返回字符串
语言js为“”
var d=新日期();
如果(d.getHours()<12){
返回“早上好,+a+”;
}否则{
返回“晚上好,+a+!”;
}
""";

sql UDF中是否允许这种灵活的处理?我似乎没有在internet上找到任何示例。

您也可以使用SQL UDF中的条件来实现相同的功能,例如:

CREATE TEMPORARY FUNCTION customGreeting(a STRING) AS (
  IF(CURRENT_TIME() < '12:00:00',
     CONCAT('Good Morning, ', a, '!'),
     CONCAT('Good Evening, ', a, '!'))
);
创建临时函数customGreeting(字符串)作为(
如果(当前时间()<'12:00:00',
康卡特(“早上好,”,a“!”),
康卡特(“晚上好,”,a“!”)
);

非常感谢您,Elliott。它是否支持多行语句和其他流控制,如Oracle PL-SQL、SQL Server T-SQL和JavaScript中的if、then else、for/while循环?不能在SQL UDF中使用过程语句。它的主体需要是一个表达式。@ZhangAllen如果它解决了你的疑问,你可以接受Elliot的答案