2016-10-12 2 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 편집기에서 "표준 SQL에서 인라인 UDF 만 지원됩니다"라는 메시지가 나타납니다. 그런 다음 Bigquery의 유효성 검사기에 "오류 : 구문 오류 : 예상 됨"이라는 빨간색 메시지가 표시되지만 [4 : 5]에서 키워드 SELECT가 표시됨 ... 마지막으로 쿼리를 참조하고 빨간색으로 선택 문장에 밑줄을 긋습니다.

그래서 다음 질문은 내 마음에 와서 :

  • 는 UDF 기능에 문제가 있습니까? 어쩌면 인라인으로 쓰여진 것이 아닌가?
  • 위의 오류 메시지에는 "표준 SQL에서 인라인 UDF 만 지원됩니다"라고 나와 있습니다. 그렇다면 "레거시 모드 사용"에서 틱을 제거해야합니다.

도움 주셔서 감사합니다. (자세한 표준에서)

+0

아래 시도 - 당신은 또한 그것을 투표를 고려할 수 있습니다. 자세한 내용은 http://stackoverflow.com/help/someone-answers 및 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 –

답변

2

스칼라 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; 

표준 SQL

User-Defined Functions에 대한 자세한 내용을 참조하십시오 (더 UDF 편집기가 여기에 필요하지 않습니다) 쿼리 편집기에 배치 될 필요가 쿼리의 "일부"입니다 문제의 특정 쿼리

는 - 대답은 당신이 당신의 문제를 해결 도움이되었습니다 당신이 그것을 인정하면

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

의 Upvote 섹션을 참조하십시오. 마이그레이션 가이드의 관련 주제 : https://cloud.google.com/bigquery/sql-reference/migrating-from-legacy-sql#differences_in_user-defined_javascript_functions –

관련 문제