2017-04-05 6 views
0

오늘 웹 편집기 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_functionsBigQuery : 표준 SQL을 사용하는 외부 UDF

따라서 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; 

질문 : 웹 UI에서 표준 SQL로 외부 UDF를 사용하는 방법은 무엇입니까?

답변

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; 
+0

내가 사용 레거시 SQL' 선택하지 않은 경우 '생각 - 사용자가하기 사용'동안 UDF 편집기에서 일부 내용을 쓰고 자 할 –

+1

을 선택하기위한'UDF Editor'도 사용할 수 없습니다 레거시 SQL '을 선택한 다음 쿼리 편집기로 돌아가서'레거시 SQL 사용 '을 선택 취소하고 쿼리를 실행하십시오. –

+0

예, 이것이 PO에 들어가는 유일한 방법 인 것 같습니다. –

관련 문제