【问题标题】:Conditional evaluation bigquery UDF条件评估 bigquery UDF
【发布时间】:2020-11-16 01:35:34
【问题描述】:

我将一些值传递给 UDF 并检查它们是否在一个范围之间,我也传递了该范围。 我的两个参数: P5->1 , P10->2 。我将此函数应用于整数列。 我从下面的这个 sn-p 中得到了一个奇怪的结果:

(INPUT > P5 && INPUT <= P10)

输入:117

P5:1

P10:2

返回:真 (以上所有值均通过直接输出得到确认)

所以我尝试使用参数:

(INPUT > 1 && INPUT <= 2)

输入:117

返回:假

完整代码:

CREATE TEMP FUNCTION label2(INPUT INT64, P5 INT64, P10 INT64)
RETURNS STRING
LANGUAGE js
"""
if (INPUT > P5 && INPUT <= P10){
return 'B1'
}else{
return false
}
""";
SELECT A.COLUMN , LABEL2(A.COLUMN,1,2)
FROM ... AS A 

作为

【问题讨论】:

    标签: javascript sql if-statement google-bigquery user-defined-functions


    【解决方案1】:

    您遇到的问题是因为 INT64 不支持作为 JavaScript UDF 的输入类型。因此,您的输入值被视为字符串,从而导致您看到的结果

    改为使用 FLOAT64 将整数值表示为数字

    所以,您的 UDF 应该如下所示

    CREATE TEMP FUNCTION label2(INPUT FLOAT64, P5 FLOAT64, P10 FLOAT64)
    RETURNS STRING
    LANGUAGE js AS
    """
    if (INPUT > P5 && INPUT <= P10){
      return 'B1'
    } else {
      return false
    }
    """;    
    

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多