Хранимая процедура BigQuery для захвата имени таблицы вместе с количеством записей для этого имени таблицы

#stored-procedures #google-bigquery

#хранимые процедуры #google-bigquery

Вопрос:

Я создал следующую хранимую процедуру в BigQuery, чтобы получить список имен таблиц вместе с количеством для каждого имени таблицы. Я столкнулся с 2 проблемами, которые я не могу решить.

# 1 — Как мне выполнить подсчет для каждой таблицы в моей инструкции Sql «Выполнить немедленное»?

# 2 — Мой массив результатов «tbl_lst_array» содержит более 800 таблиц, но все же хранимая процедура (при выполнении) возвращает только 100 строк. Это из-за следующей квоты, введенной Google? https://cloud.google.com/bigquery/quotas

Я обрабатываю одну таблицу за раз через цикл.

Спасибо за вашу помощь.

 
create procedure SP_MERGE.SP_bq_table_counts()

BEGIN
   DECLARE tbl_lst_array ARRAY<STRING>;
   DECLARE i INT64 DEFAULT 1;
   CREATE TEMP TABLE tbl_results(field STRING);  
   
   SET tbl_lst_array = (SELECT ARRAY_AGG(table_schema||'.'||table_name) FROM `tng-edw-data-dev`.EDW.INFORMATION_SCHEMA.TABLES);   
   
   WHILE (i < ARRAY_LENGTH(tbl_lst_array)) DO
   
      EXECUTE IMMEDIATE '''
        INSERT tbl_results
            SELECT "''' || tbl_lst_array[ORDINAL(i)] || '''"
        ''';
     
        # Increment counter
        SET i = i   1;
     
   END WHILE;   

   select * from tbl_results;
   
END;
  

Ответ №1:

Ваша точка зрения верна. Вместо выполнения 1 задания вставки для каждой итерации убедитесь, что вы собираете / объединяете их и выполняете в конце цикла 1 одно задание вставки со всеми строками. Таким образом, вы избегаете ограничений на одновременную работу.