
У меня есть Google Cloud Function (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 в другую. Однако, подобно заданию загрузки, этоЗапросРаботакоторый указывает целевую таблицу для размещения в ней результатов. Таким образом, никакие из этих данных не должны передаваться через мой GCF, и вместо этого вся передача данных должна происходить в BQ.
решение1
Передача данных на самом деле происходит при распаковке файла в GCS. Я получаю большой .tar.gz, содержащий несколько файлов, поэтому я распаковываю (как поток) в GCS. Отсюда и происходит вся передача данных.
Мне немного странно, что это считается исходящим трафиком сокета, поскольку он является внутренним для центра обработки данных Google.