Storage Write API를 사용한 데이터 일괄 로드
이 문서에서는 BigQuery Storage Write API를 사용하여 데이터를 BigQuery에 일괄 로드하는 방법을 설명합니다.
일괄 로드 시나리오에서 애플리케이션은 데이터를 쓰고 단일 원자 트랜잭션으로 커밋합니다. Storage Write API를 사용하여 데이터를 일괄 로드하는 경우 대기 유형에서 하나 이상의 스트림을 만듭니다. 대기 유형은 스트림 수준의 트랜잭션을 지원합니다. 스트림은 커밋할 때까지 레코드는 대기 상태로 버퍼링됩니다.
일괄 워크로드의 경우 커스텀 Storage Write API 코드를 작성하는 대신 Managed Service for Apache Spark를 사용하여 BigQuery용 Apache Spark SQL 커넥터를 통해 Storage Write API 를 사용하는 것이 좋습니다.
Storage Write API는 데이터 파이프라인 아키텍처에 적합합니다. 기본 프로세스는 여러 스트림을 만듭니다. 각 스트림에 대해 작업자 스레드 또는 별도의 프로세스를 할당하여 일괄 데이터의 일부를 작성합니다. 각 작업자는 스트림에 대한 연결을 만들고, 데이터를 쓰고, 완료되면 스트림을 완료합니다. 모든 작업자가 기본 프로세스에 성공적인 완료를 알리면 기본 프로세스가 데이터를 커밋합니다. 작업자가 실패하면 데이터의 할당된 부분이 최종 결과에 표시되지 않으며 전체 작업자를 안전하게 재시도할 수 있습니다. 보다 정교한 파이프라인에서 작업자는 기본 프로세스에 기록된 마지막 오프셋을 보고하여 진행 상황을 체크포인트화합니다. 이 방식은 장애 복원력이 우수한 강력한 파이프라인을 구축할 수 있습니다.
대기 유형을 사용한 데이터 일괄 로드
애플리케이션은 대기 유형을 사용하기 위해 다음을 수행합니다.
CreateWriteStream을 호출하여 대기 유형에서 하나 이상의 스트림을 만듭니다.- 각 스트림에 대해 루프에서
AppendRows를 호출하여 레코드 배치를 씁니다. - 각 스트림에 대해
FinalizeWriteStream을 호출합니다. 이 메서드를 호출한 다음에는 스트림에 추가 행을 기록할 수 없습니다.FinalizeWriteStream을 호출한 후AppendRows를 호출하면google.rpc.Status오류에StorageErrorCode.STREAM_FINALIZED가 포함된StorageError가 반환됩니다.google.rpc.Status오류 모델에 대한 자세한 내용은 오류를 참조하세요. BatchCommitWriteStreams를 호출하여 스트림을 커밋합니다. 이 메서드를 호출한 후 데이터를 읽기에 사용할 수 있습니다. 스트림을 커밋하는 중에 오류가 발생하면BatchCommitWriteStreamsResponse의stream_errors필드에 오류가 반환됩니다.
커밋은 원자적 작업이며 한 번에 여러 스트림을 커밋할 수 있습니다. 스트림은 한 번만 커밋할 수 있으므로 커밋 작업이 실패하면 재시도해도 안전합니다. 스트림을 커밋할 때까지 데이터는 대기 중이며 읽기에 표시되지 않습니다.
스트림이 확정된 후 커밋되기 전에 데이터는 최대 4시간 동안 버퍼에 남아 있을 수 있습니다. 대기 중인 스트림은 24시간 이내에 커밋되어야 합니다. 대기 중인 스트림 버퍼의 총 크기에는 할당량 한도가 있습니다.
다음 코드는 대기 유형에서 데이터를 쓰는 방법을 보여줍니다.
C#
BigQuery용 클라이언트 라이브러리 설치 및 사용 방법은 BigQuery 클라이언트 라이브러리를 참조하세요. 자세한 내용은 BigQuery C# API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.