2016-10-12 10 views
3

新しいStandard SQL - WebUIでBigQuery UDFを使用する方法を知りたいと思います。Standard SQL - WebUIでBigQuery UDFを使用するには?

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エディターでは、「インラインUDFのみが標準SQLでサポートされています」というメッセージが表示されます。 Bigqueryのバリデーターに "Error:Syntax error:Expected")という赤いメッセージが表示されますが、[4:5]でキーワードSELECTが取られました...これは最後にクエリーを参照し、選択されたセンテンスを赤で下線を引いています。

ので、次の質問は、私の心に来る:

  • UDF機能に問題はありますか?たぶんそれはインラインで書かれていないでしょうか?
  • 上記のエラーメッセージには、「標準SQLではインラインUDFのみがサポートされています」と記載されています。つまり、これは、「レガシーモードを使用する」からティックを削除する必要があることを意味しますか?

ありがとうございました。

+0

下にしてみてください。 http://meter.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 –

答えて

2

スカラUDF(標準ではそれ以上)のため、すべてのクエリエディタに置くことが必要であり、クエリの「一部」である(ないUDF Editorがここで必要ありません)

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; 

標準SQL

User-Defined Functionsのためのより多くを参照してください。問題のあなたの特定のクエリに対する

- あなたはまた、それを投票考慮するかもしれない - 答えはあなたの問題を解決役立っていると、あなたがそれを受け入れた場合

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

のhttp://stackoverflow.com/help/someone-answersおよびUpvoteセクションを参照してください。移行ガイドの関連トピック:https://cloud.google.com/bigquery/sql-reference/migrating-from-legacy-sql#differences_in_user-defined_javascript_functions –

関連する問題