2016-10-12 79 views
3

我想知道如何在新的標準SQL - WebUI中使用BigQuery UDF。如何在標準SQL中使用BigQuery UDF - WebUI?

UDF函數似乎只能在「使用傳統SQL模式」中啓用,但在標準SQL中不起作用。

這是UDF編輯器中的UDF功能:

// UDF registration 
bigquery.defineFunction(
    'urlDecode', // Name used to call the function from SQL 

    ['title', 'num_requests'], // Input column names 

    // JSON representation of the output schema 
    [{name: 'title', type: 'string'}, 
    {name: 'requests', type: 'integer'}], 

    // The UDF 
function urlDecode(row, emit) { 
    emit({title: decodeHelper(row.title), 
     requests: row.num_requests}); 
} 

// Helper function for error handling 
function decodeHelper(s) { 
    try { 
    return decodeURI(s); 
    } catch (ex) { 
    return s; 
    } 
} 
); 

而且這是在查詢編輯器中查詢:

SELECT requests, title 
FROM 
    urlDecode(
    SELECT 
     title, sum(requests) AS num_requests 
    FROM 
     [fh-bigquery:wikipedia.pagecounts_201504] 
    WHERE language = 'fr' 
    GROUP EACH BY title 
) 
WHERE title LIKE '%ç%' 
ORDER BY requests DESC 
LIMIT 100 

如果我刪除「使用傳統模式」蜱在UDF編輯器中,出現一條消息:「標準SQL只支持內聯UDF」。然後一個紅色的消息出現在Bigquery的驗證器中,說:「錯誤:語法錯誤:預期的」)「,但在[4:5]得到了關鍵字SELECT」...這最後一個指向查詢,並且它將選中的句子強調爲紅色。

那麼,接下來的問題來到我的腦海:

  • 有沒有在UDF功能出了問題?也許它不是內聯寫的?
  • 上一條錯誤消息說:「標準SQL僅支持內聯UDF」。所以,這意味着我應該刪除「使用傳統模式」中的勾號?

感謝您的幫助。

+0

如果答案幫助你解決問題,你接受了它 - 你也可以考慮投票起來。有關http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235中的http://stackoverflow.com/help/someone-answers和Upvote部分,請參閱更多內容。 –

回答

2

標量UDF(在標準更多)是一個查詢的「一部分」,因此都需要放在查詢編輯器(無UDF編輯器需要在這裏)

CREATE TEMPORARY FUNCTION timesTwo(x INT64) 
RETURNS INT64 
    LANGUAGE js AS """ 
    return x*2; 
"""; 
SELECT timesTwo(numbers) as doubles 
FROM UNNEST([1, 2, 3, 4, 5]) AS numbers; 

查看更多用於User-Defined Functions在標準SQL

對於問題的特定查詢 - 試試下面

CREATE TEMPORARY FUNCTION urlDecode(x STRING) 
RETURNS STRING 
    LANGUAGE js AS """ 
    // Helper function for error handling 
    function decodeHelper(s) { 
    try { 
     return decodeURI(s); 
    } catch (ex) { 
     return s; 
    } 
    } 
    return decodeHelper(x); 
"""; 

SELECT 
    urlDecode(title) AS title, SUM(requests) AS requests 
FROM 
    `fh-bigquery.wikipedia.pagecounts_201504` 
WHERE LANGUAGE = 'fr' 
GROUP BY title 
HAVING title LIKE '%ç%' 
ORDER BY requests DESC 
LIMIT 100 
+2

另請參閱遷移指南中的相關主題:https://cloud.google.com/bigquery/sql-reference/migrating-from-legacy-sql#differences_in_user-defined_javascript_functions。 –

相關問題