#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 одно задание вставки со всеми строками. Таким образом, вы избегаете ограничений на одновременную работу.