【问题标题】:BigQuery: external UDFs with standard SQLBigQuery:使用标准 SQL 的外部 UDF
【发布时间】:2017-04-05 10:28:17
【问题描述】:

今天我尝试在 Web 编辑器 UI 中使用标准 SQL 语言编写 UDF,并且我已经取消选中“使用旧版 SQL”选项,但它返回给我以下错误消息: 未实现:您不能将旧版 SQL UDF 与标准 SQL 查询一起使用。见https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#differences_in_user-defined_javascript_functions

因此我尝试了 Google Cloud Platform 上提供的外部 UDF 示例:https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions。但它仍然返回给我同样的错误信息。在下面的例子中:

CREATE TEMPORARY FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js AS """
  return x*y;
""";
WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x, y, multiplyInputs(x, y) as product
FROM numbers;

问题:如何在 Web UI 中将外部 UDF 与标准 SQL 一起使用?

【问题讨论】:

    标签: google-bigquery google-cloud-platform


    【解决方案1】:

    确保在“UDF 编辑器”面板中输入输入。它应该与您的其余查询一起使用。示例见the topic in the migration guide

    #standardSQL
    -- Computes the harmonic mean of the elements in 'arr'.
    -- The harmonic mean of x_1, x_2, ..., x_n can be expressed as:
    --   n / ((1 / x_1) + (1 / x_2) + ... + (1 / x_n))
    CREATE TEMPORARY FUNCTION HarmonicMean(arr ARRAY<FLOAT64>)
      RETURNS FLOAT64 LANGUAGE js AS """
    var sum_of_reciprocals = 0;
    for (var i = 0; i < arr.length; ++i) {
      sum_of_reciprocals += 1 / arr[i];
    }
    return arr.length / sum_of_reciprocals;
    """;
    
    WITH T AS (
      SELECT GENERATE_ARRAY(1.0, x * 4, x) AS arr
      FROM UNNEST([1, 2, 3, 4, 5]) AS x
    )
    SELECT arr, HarmonicMean(arr) AS h_mean
    FROM T;
    

    【讨论】:

    • 我想当 Use Legacy SQL 未选中时 - UDF Editor 甚至无法供用户选择
    • 可以在选中Use Legacy SQL 时在UDF 编辑器中写入一些内容,然后切换回查询编辑器并取消选中Use Legacy SQL 并尝试运行查询。
    • 是的,看来这是让案件 PO 进入的唯一途径
    • 我检查了 UDF 编辑器,发现我在那里取消了对 UDF 的注释,这引起了这个错误。
    • 如果这解决了问题,请accept and upvote the answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多