
Google Cloud Storage (GCS) を監視する Google Cloud Function (GCF) があります。ファイルが特定のバケットにドロップされると、GCF は LoadJob を起動し、Big Query (BQ) にファイルをインポートするように指示します。
私はNodeJS LoadJob関数それは(私が理解している限りでは)BQ にファイルを直接インポートするように指示するだけのはずです。言い換えれば、BQ は GCS と通信することになっており、GCF が仲介役となって何らかの方法でデータをストリーミングするわけではありません。
ただし、関数が一度に多数のファイルで実行されると、次の GCF クォータ エラーが発生します。
Outgoing socket traffic for region us-central1 : per 100 seconds
デフォルトのクォータ値は で10737418240
、これはバイト単位であると想定しており、クォータは 100 秒ごとに約 10 GB になります。
なぜ私のGCFはどれでも発信ソケット トラフィックですか? 私が行っているのは、インポートする BQ ジョブを設定することだけです。これらはすべて内部で行われる必要があり、さらに、GCF の割り当て/帯域幅を使用せずに、BQ と GCS の間で直接行われる必要があります。ファイルはかなり大きいですが、それがまさに GCS から BQ に直接ロードする目的ではないでしょうか?
注: コードをもう少し詳しく読んでみると、あるBQテーブルから別のBQテーブルにデータを移動するクエリも実行していることがわかります。ただし、ロードジョブと同様に、これはクエリジョブ結果を配置する宛先テーブルを指定します。したがって、そのデータは GCF を介してストリーミングされず、すべてのデータ転送が BQ 内で行われるはずです。
答え1
実際のデータ転送は、ファイルを GCS に解凍することによって行われます。複数のファイルを含む大きな .tar.gz を受け取ったので、(ストリームとして) GCS に解凍します。すべてのデータ転送はここから行われます。
これは Google データセンター内部のトラフィックであるにもかかわらず、送信ソケット トラフィックと見なされるのは少し奇妙に思えます。