В качестве альтернативы уже опубликованным ответам для дальнейшего содействия сообществу, я бы предложил использовать Определяемые пользователем функции (UDF) в BigQuery.
Этот ресурс позволяет создавать функции в SQL или JavaScript, которые принимают столбцы ввода и выполняют действия, возвращая желаемый результат после преобразований. Я также добавил бы, что их легко изменить в случае необходимости (например, от суммы до функции вычитания). Вы можете прочитать больше об этом здесь .
Я создал UDF, используя JavaScript, он ниже:
CREATE TEMP FUNCTION
sub_arr (arr ARRAY<int64>)
RETURNS int64
LANGUAGE js AS '''
arr_sub=0
for(var i = 0; i < arr.length; i++){
arr_sub = parseInt(arr[i]) - arr_sub ;
};
return arr_sub;
''';
#Sample data
WITH
data AS (
SELECT [2, 7] AS some_array UNION ALL
SELECT [10, 32] AS some_array UNION ALL
SELECT [15,20] AS some_array )
#query using the UDF
SELECT sub_arr(some_array) AS result_diff
FROM data
и вывод
Я хотел бы указать, что вы должны указать тип массива, который вы будете использовать в функции, в данном случае ARRAY<int64>
. Кроме того, в соответствии с документацией Javascript UDF не принимает INT64
в качестве типа возврата и преобразуется в FLOAT64
, рекомендуется обратить внимание в используемых типах данных.