Присвоить столбцу массива значение переменной в сценарии bigquery

#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 для написания сценариев? Большое спасибо.