要解决BigQuery批量执行中多余的远程函数执行的问题,可以使用以下方法:
WITH inline_function AS (
SELECT col1, col2, col3,
(SELECT COUNT(*) FROM `project.dataset.table` WHERE col1 = t.col1) AS count
FROM `project.dataset.table` AS t
)
SELECT col1, col2, col3, count
FROM inline_function
-- 创建临时表存储函数结果
CREATE TEMPORARY TABLE temp_table AS
SELECT col1, COUNT(*) AS count
FROM `project.dataset.table`
GROUP BY col1;
-- 使用临时表进行查询
SELECT t.col1, t.col2, t.col3, tt.count
FROM `project.dataset.table` AS t
JOIN temp_table AS tt
ON t.col1 = tt.col1;
首先,创建一个用户定义函数:
CREATE FUNCTION my_function(col1 STRING) AS ((
SELECT COUNT(*) FROM `project.dataset.table` WHERE col1 = col1
));
然后,在查询中使用该函数:
SELECT col1, col2, col3, my_function(col1) AS count
FROM `project.dataset.table`;
注意:用户定义函数在BigQuery中是按行执行的,因此可能会对性能产生一定的影响。在处理大数据集时,建议使用前面提到的方法。