在BigQuery中处理大数据集时,你可能想要使用循环语句来执行某些任务。但是,循环可能会导致查询效率低下,而且可能需要很长时间才能执行完毕。另一种方法是使用多个单个查询,这样可以避免循环和等待的时间。
下面是一个代码示例,展示如何使用多个单个查询代替循环语句:
WITH
dates AS (
SELECT
DATE(year||"-"||mo||"-01") month_start
FROM
(SELECT
CAST(year AS STRING) year,
CAST(month AS STRING) mo
FROM
UNNEST(GENERATE_ARRAY(2019, 2020)) year
CROSS JOIN
UNNEST(GENERATE_ARRAY(1,12)) month )
),
results AS (
SELECT
month_start,
COUNT(*) AS count
FROM
bigquery-public-data.new_york_citibike.citibike_trips
WHERE
DATE(start_time)=month_start
GROUP BY
1
ORDER BY
1
)
SELECT
month_start,
count,
(
SELECT
SUM(count)
FROM
UNNEST(ARRAY_AGG(results)) )
AS running_sum
FROM
results
JOIN
dates
ON
month_start=DATE_TRUNC(month_start, MONTH)
ORDER BY
month_start
注意,这个例子使用了常量WITH CLAUSE子句进行日期循环,然后在主查询中与citibike_trips表JOIN。在每个月份开始时,我们计算前一个月的行数。最后,我们使用ARRAY_AGG和UNNEST函数,来计算每行的运行总和。
总而言之,通过将多个单个查询结合在一起,而不是使用循环语句,可以更有效率地处理大型数据集。