Как поймать ошибку тайм-аута и повторить попытку при записи больших данных в Google Таблицы с помощью googlesheets4 в R

У меня есть сценарий R, который считывает данные из БД и записывает их в электронную таблицу Google (сценарий читает несколько таблиц, каждая из которых записана на отдельный лист электронной таблицы). Он работает нормально, но проблема, с которой я столкнулся, заключается в том, что, поскольку некоторые таблицы довольно большие, функция googlesheets4 :: write_range случайным образом выдает ошибку тайм-аута, потому что лист все еще занят обработкой ранее написанных таблиц. Я попытался написать код, чтобы отловить ошибку, а также использовать функцию повтора (из повторной попытки пакета), но, похоже, она не работает, я просто не могу найти подходящий способ отловить ошибку, которую выдает функция range_write при отсчете времени из. То, что мне нужно, должно выглядеть примерно так (я думаю):

retry::retry(
 range_write(my_sheet,
             my_data,
             sheet = sheet,
             range = "A1",
             col_names = TRUE),
 when = "some error",
 max_tries = 3,
 interval = 10)

Как уже упоминалось, предыдущий код работает, но не может обнаружить ошибку, которую выдает range_write при истечении времени ожидания, он по-прежнему дает следующее: Ошибка: ошибка сервера: (503) НЕДОСТУПЕН.

Если через несколько секунд я снова попытаюсь выполнить функцию для таблицы, в которой произошел сбой, обычно она работает, поэтому я знаю, что это всего лишь вопрос повторной попытки (если обязательно, 2 или 3 раза), давая несколько секунд листу для обработки информации. .

Любая помощь или советы по выполнению этой работы будут безмерно признательны!


person Sebastian Schurmann    schedule 15.06.2021    source источник


Ответы (1)


РЕШЕНО: запуск скрипта с попыткой и сохранение его в новой переменной решает проблему, например:

результат = попытка (range_write (my_sheet, my_data, sheet = sheet, range = A1, col_names = TRUE))

Таким образом, диапазон записывается, если он работает, но в случае сбоя сохраняется сообщение об ошибке в переменной «результат». Затем результат можно проверить через функцию while, чтобы повторить его при необходимости.

person Sebastian Schurmann    schedule 23.06.2021