У меня есть функция Google Cloud (GCF), которая отслеживает Google Cloud Storage (GCS). Когда файл попадает в конкретную корзину, GCF запускает LoadJob, сообщая Big Query (BQ) об импорте файла.
Я использую Функция NodeJS LoadJob это (насколько я понимаю) должно просто дать BQ команду импортировать файл напрямую. Другими словами, BQ должен взаимодействовать с GCS, а не с моим GCF, который является посредником и каким-то образом передает данные.
Однако, когда моя функция выполняется одновременно с большим количеством файлов, я получаю следующую ошибку квоты GCF: Outgoing socket traffic for region us-central1 : per 100 seconds
Значение квоты по умолчанию: 10737418240
, который я предполагаю в байтах, делая квоту ~ 10 ГБ каждые 100 секунд.
Почему мой GCF должен делать любой исходящий трафик сокетов? Единственное, что я делаю, это настраиваю задание BQ для импорта. Все это должно быть внутренним, и, кроме того, все это должно происходить непосредственно между BQ и GCS, без использования моих квот / пропускной способности GCF. Файлы довольно большие, но разве не в этом смысл загрузки в BQ прямо из GCS?
Примечание. Прочитав код немного ближе, я также выполняю запрос для перемещения данных из одной таблицы BQ в другую. Однако, как и при загрузке, это QueryJob который указывает целевую таблицу для размещения в ней результатов. Таким образом, никакие из этих данных не должны передаваться через мой GCF, а вместо этого вся передача данных должна происходить в BQ.
На самом деле передача данных происходит при разархивировании файла в GCS. Я получаю большой .tar.gz, содержащий несколько файлов, поэтому распаковываю (как поток) в GCS. Отсюда вся передача данных.
Мне немного странно, что это считается исходящим трафиком сокетов, поскольку он является внутренним для центра обработки данных Google.