
Ich habe eine Google Cloud Function (GCF), die Google Cloud Storage (GCS) überwacht. Wenn eine Datei in einen bestimmten Bucket fällt, startet die GCF einen LoadJob, der Big Query (BQ) anweist, die Datei zu importieren.
Ich verwende dieNodeJS LoadJob-Funktiondas soll (soweit ich weiß) BQ lediglich anweisen, die Datei direkt zu importieren. Mit anderen Worten, BQ soll mit GCS kommunizieren, anstatt dass mein GCF als Mittelsmann auftritt und die Daten auf irgendeine Weise streamt.
Wenn meine Funktion jedoch auf vielen Dateien gleichzeitig ausgeführt wird, erhalte ich den folgenden GCF-Kontingentfehler:
Outgoing socket traffic for region us-central1 : per 100 seconds
Der Standardkontingentwert beträgt 10737418240
, wobei ich davon ausgehe, dass er in Bytes angegeben wird, wodurch das Kontingent alle 100 Sekunden ca. 10 GB beträgt.
Warum sollte mein GCFbeliebigausgehender Socket-Verkehr? Das Einzige, was ich mache, ist, einen BQ-Job zum Importieren einzurichten. All das sollte intern sein, und außerdem sollte alles direkt zwischen BQ und GCS erfolgen, ohne meine GCF-Kontingente/Bandbreite zu verwenden. Die Dateien sind ziemlich groß, aber ist das nicht genau der Sinn des Ladens in BQ direkt von GCS?
Hinweis: Wenn ich meinen Code etwas genauer lese, führe ich auch eine Abfrage aus, um Daten von einer BQ-Tabelle in eine andere zu verschieben. Ähnlich wie beim Ladejob handelt es sich jedoch um einenAbfrageJobdas eine Zieltabelle angibt, in der die Ergebnisse abgelegt werden. Daher sollten keine dieser Daten durch meinen GCF gestreamt werden, und stattdessen sollte die gesamte Datenübertragung innerhalb von BQ erfolgen.
Antwort1
Die Datenübertragung erfolgt eigentlich durch das Entpacken einer Datei in GCS. Ich erhalte eine große .tar.gz-Datei mit mehreren Dateien, die ich (als Stream) in GCS entpacke. Von dort kommt die gesamte Datenübertragung.
Ich finde es ein wenig merkwürdig, dass dies als ausgehender Socket-Verkehr betrachtet wird, da er intern im Google-Rechenzentrum stattfindet.