
Google Cloud Storage(GCS)를 감시하는 Google Cloud Function(GCF)이 있습니다. 파일이 특정 버킷에 떨어지면 GCF는 BigQuery(BQ)에 파일을 가져오라고 지시하는 LoadJob을 실행합니다.
나는NodeJS LoadJob 함수(내가 이해한 바에 따르면) BQ에게 파일을 직접 가져오도록 지시해야 합니다. 즉, 내 GCF가 중개인이 되어 어떤 방식으로든 데이터를 스트리밍하는 대신 BQ는 GCS와 통신해야 합니다.
그러나 내 함수가 한 번에 많은 파일에서 실행되면 다음과 같은 GCF 할당량 오류가 발생합니다.
Outgoing socket traffic for region us-central1 : per 100 seconds
기본 할당량 값은 10737418240
바이트 단위라고 가정하고 100초마다 할당량을 ~ 10GB로 만듭니다.
왜 내 GCF가 만들어야 합니까?어느나가는 소켓 트래픽? 내가 하고 있는 유일한 일은 가져올 BQ 작업을 설정하는 것뿐입니다. 이 모든 것은 내부에 있어야 하며 더 나아가 GCF 할당량/대역폭을 사용하지 않고 BQ와 GCS 사이에 직접적으로 이루어져야 합니다. 파일이 꽤 크지만, 이것이 바로 GCS에서 직접 BQ로 로드하는 지점이 아닌가요?
참고: 코드를 좀 더 자세히 읽으면서 한 BQ 테이블에서 다른 BQ 테이블로 데이터를 이동하는 쿼리도 수행하고 있습니다. 그러나 이는 로드 작업과 유사합니다.쿼리작업결과를 저장할 대상 테이블을 지정합니다. 따라서 해당 데이터 중 어느 것도 내 GCF를 통해 스트리밍되어서는 안 되며 대신 모든 데이터 전송이 BQ 내에서 이루어져야 합니다.
답변1
실제로 데이터 전송은 파일의 압축을 GCS로 풀면서 발생합니다. 여러 파일이 포함된 큰 .tar.gz를 받았으므로 압축을 (스트림으로) GCS에 푼다. 여기에서 모든 데이터 전송이 시작됩니다.
이것이 Google 데이터 센터 내부에 있기 때문에 나가는 소켓 트래픽으로 간주된다는 것이 나에게는 조금 이상합니다.