В BigQuery нет курсора SQL, но есть некоторые альтернативы, которые вы можете использовать вместо этого, в качестве первого варианта вы можете использовать временную таблицу , которая будет существовать в течение всего времени существования текущий скрипт. Таблицы, созданные в процедуре, по-прежнему доступны после завершения вызова процедуры до завершения основного сценария.
CREATE TEMP TABLE light AS
SELECT * FROM `bigquery-public-data.noaa_lightning.lightning_2019` LIMIT 1000;
SELECT * FROM light;
Кроме того, существует оператор WITH
( docs ) для ссылки к SELECT (s), с ограничением на то, что вы должны выполнять операции внутри одного и того же предложения, что может быть, например, вызовом пользовательской функции ( UDF ) или хранимой процедуры ( SP ) для необходимых операций обновления.
WITH data AS (
SELECT * FROM `bigquery-public-data.noaa_lightning.lightning_2019` LIMIT 1000
)
SELECT * FROM data;
Наконец, вы можете использовать массив , чтобы получить все имена предприятий, а затем в пределах al oop выполнить необходимые операции обновления (также вы можете вызвать UDF или SP).
-- Sample from the official documentation for the use of an array
-- Declare a variable to hold names as an array.
DECLARE top_names ARRAY<STRING>;
-- Build an array of the top 100 names from the year 2017.
SET top_names = (
SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
FROM `bigquery-public-data`.usa_names.usa_1910_current
WHERE year = 2017
);