Я создал шаблон потока данных, который позволяет мне импортировать данные из файла CSV в облачном хранилище в BigQuery. Я использую Cloud Function для Firebase, чтобы создавать задания из этого шаблона каждый день в определенное время. Это код в функции (с удалением некоторых ненужных частей).
const filePath = object.name?.replace(".csv", "");
// Exit function if file changes are in temporary or staging folder
if (
filePath?.includes("staging") ||
filePath?.includes("temp") ||
filePath?.includes("templates")
)
return;
const dataflow = google.dataflow("v1b3");
const auth = await google.auth.getClient({
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
});
let request = {
auth,
projectId: process.env.GCLOUD_PROJECT,
location: "asia-east1",
gcsPath: "gs://my_project_bucket/templates/csv_to_bq",
requestBody: {
jobName: `csv-to-bq-${filePath?.replace(/\//g, "-")}`,
environment: {
tempLocation: "gs://my_project_bucket/temp",
},
parameters: {
input: `gs://my_project_bucket/${object.name}`,
output: biqQueryOutput,
},
},
};
return dataflow.projects.locations.templates.launch(request);
Эта функция запускается каждый раз, когда любой файл записывается в облачное хранилище. Я работаю с датчиками, поэтому, по крайней мере, мне нужно импортировать 89 разных данных, т.е. разные файлы CSV, в течение 15 минут.
Весь процесс работает нормально, если одновременно работают только 4 задания. Однако, когда функция пыталась создать пятое задание, API возвратил много разных типов ошибок.
Ошибка 1 (не точная, так как я больше не могу найти ошибку):
Error Response: [400] The following quotas were exceeded: IN_USE_ADDRESSES
Ошибка 2:
Dataflow quota error for jobs-per-project quota. Project *** is running 25 jobs.
Please check the quota usage via GCP Console.
If it exceeds the limit, please wait for a workflow to finish or contact Google Cloud Support to request an increase in quota.
If it does not, contact Google Cloud Support.
Ошибка 3:
Quota exceeded for quota metric 'Job template requests' and limit 'Job template requests per minute per user' of service 'dataflow.googleapis.com' for consumer 'project_number:****'.
Я знаю, что могу пропустить начальные задания, чтобы избежать ошибок 2 и 3. Однако я не знаю, как начать работы таким образом, чтобы не заполнить адреса. Итак, как мне этого избежать? Если я не могу, то какой подход я должен использовать?