#google-bigquery
#google-bigquery
Вопрос:
Я пытаюсь получить значение нескольких столбцов в массиве и установить их как переменную, которую можно использовать в цикле для выполнения чего-то другого. Спасибо.
DECLARE the_array ARRAY<STRUCT<value1 STRING,value2 STRING>>;
SET the_array = (
SELECT ARRAY_AGG(STRUCT(value1,value2))
FROM `project.dataset.table`
WHERE somthing = 'somthing'
);
LOOP
SET i = i 1;
SET var1 = the_array[ORDINAL(????)]; // what do I do here?
SET var2 = the_array[ORDINAL(???)]; // what do I do here?
IF i > ARRAY_LENGTH(the_array) THEN
LEAVE;
END IF;
insert into `project.dataset.other_table` values(var1,var2);
END LOOP;
Ответ №1:
Если вы ищете правильный способ достижения вышеуказанного результата — сделайте это на основе набора, который является наиболее эффективным способом выражения вашей логики в SQL
INSERT INTO `project.dataset.other_table`
SELECT value1, value2
FROM `project.dataset.table`
WHERE somthing = 'somthing'
Между тем, если целью вашего вопроса является изучение сценариев BigQuery — см. Пример ниже
DECLARE the_array ARRAY<STRUCT<value1 STRING,value2 STRING>>;
DECLARE i INT64 DEFAULT 0;
DECLARE var1, var2 STRING;
SET the_array = (
SELECT ARRAY_AGG(STRUCT(value1,value2))
FROM `project.dataset.table`
WHERE somthing = 'somthing'
);
LOOP
SET i = i 1;
IF i > ARRAY_LENGTH(the_array) THEN
LEAVE;
END IF;
SET var1 = the_array[ORDINAL(i)].value1;
SET var2 = the_array[ORDINAL(i)].value2;
insert into `project.dataset.other_table` values(var1,var2);
END LOOP;
Комментарии:
1. Да, я пытаюсь изучить сценарии BigQuery, этот второй пример — то, что мне было нужно. Можете ли вы порекомендовать какие-либо хорошие учебные ресурсы в дополнение к Google Docs для написания сценариев? Большое спасибо.