데이터 로드 소개

이 페이지에서는 BigQuery로 데이터를 로드하는 방법을 간략히 설명합니다.

개요

여러 가지 방법으로 BigQuery에 데이터를 수집할 수 있습니다.

  • 데이터 레코드 모음을 일괄 로드합니다.
  • 개별 레코드 또는 레코드 일괄 작업을 스트리밍합니다.
  • 쿼리를 사용하여 새 데이터를 생성하고 결과를 테이블에 추가하거나 덮어씁니다.
  • 타사 애플리케이션이나 서비스를 사용합니다.

이 섹션에서는 각 방법을 간략하게 설명합니다.

일괄 로드. 일괄 로드를 사용하면 단일 일괄 작업에서 소스 데이터를 BigQuery 테이블에 로드합니다. 예를 들어 데이터 소스는 CSV 파일, 외부 데이터베이스 또는 로그 파일 집합일 수 있습니다. 기존의 추출, 변환, 로드(ETL) 작업이 이 카테고리에 속합니다.

BigQuery의 일괄 로드 옵션에는 다음이 포함됩니다.

  • 로드 작업을 만들어 Cloud Storage나 로컬 파일에서 데이터를 로드합니다. 레코드는 Avro, CSV, JSON, ORC 또는 Parquet 형식일 수 있습니다.
  • BigQuery Data Transfer Service를 사용하여 Google Software as a Service(SaaS) 앱이나 타사 애플리케이션 및 서비스에서 데이터 로드를 자동화합니다.
  • 다른 관리형 서비스를 사용하여 외부 데이터 저장소에서 데이터를 내보내고 BigQuery로 가져옵니다. 예를 들어 Firestore 내보내기에서 데이터를 로드할 수 있습니다.

일괄 로드는 일회성 작업 또는 반복 일정으로 수행할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.

  • 일정에 따라 BigQuery Data Transfer Service 전송을 실행할 수 있습니다.
  • Cloud Composer와 같은 조정 서비스를 사용하여 로드 작업을 예약할 수 있습니다.
  • 크론 작업을 사용하여 일정에 따라 데이터를 로드할 수 있습니다.

스트리밍에 대한 모델 선택을 지원합니다. 스트리밍을 사용하면 한 번에 레코드 한 개씩 또는 일괄적으로 데이터를 전송합니다. 스트리밍 API를 직접 호출하는 코드를 작성하거나 Dataflow와 Apache Beam SDK를 사용하여 스트리밍 파이프라인을 설정할 수 있습니다.

생성된 데이터. DML 문을 사용하여 기존 테이블에 일괄 삽입을 수행하거나 새 테이블에 쿼리 결과를 저장할 수 있습니다.

타사 애플리케이션. 일부 타사 애플리케이션과 서비스에서는 데이터를 BigQuery에 수집할 수 있는 커넥터를 제공합니다. 수집 파이프라인을 구성하고 관리하는 방법의 세부정보는 애플리케이션에 따라 다릅니다.

데이터를 새 테이블 또는 파티션에 로드하거나, 데이터를 기존 테이블 또는 파티션에 추가하거나, 테이블 또는 파티션을 덮어쓸 수 있습니다. 파티션 작업에 대한 자세한 내용은 파티션을 나눈 테이블 관리를 참조하세요. BigQuery에 로드한 데이터는 Capacitor용 열 형식(BigQuery의 스토리지 형식)으로 변환됩니다.

BigQuery는 BigQuery 스토리지에 데이터를 로드하지 않고도 특정 형식의 외부 데이터에 대한 쿼리를 실행할 수도 있습니다. 자세한 내용은 데이터 로드의 대안을 참조하세요.

직접 사용해 보기

Google Cloud를 처음 사용하는 경우 계정을 만들어 실제 시나리오에서 BigQuery의 성능을 평가할 수 있습니다. 또한 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

BigQuery 무료로 사용해 보기

데이터 수집 방법 선택

다음은 데이터 수집 방법을 선택할 때 생각해야 할 몇 가지 고려사항입니다.

데이터 소스. 데이터 소스 또는 데이터 형식의 소스에 따라 일괄 로드와 스트리밍 중에 구현 및 유지 관리가 더 간편한 것이 무엇인지 결정할 수 있습니다. 다음 사항을 고려하세요.

  • BigQuery Data Transfer Service에서 데이터 소스를 지원하는 경우 데이터를 BigQuery로 직접 전송하는 것이 구현하기 가장 간단한 솔루션일 수 있습니다.

  • 데이터가 Spark 또는 Hadoop에서 제공되는 경우 BigQuery 커넥터를 사용하여 데이터 수집을 단순화하는 것이 좋습니다.

  • 로컬 파일의 경우 특히 BigQuery에서 변환 또는 데이터 정리 단계를 요구하지 않고 파일 형식을 지원하는 경우 일괄 로드를 사용하는 것이 좋습니다.

  • 애플리케이션 이벤트 또는 로그 스트림과 같은 애플리케이션 데이터의 경우 일괄 로드를 구현하는 것보다 실시간으로 데이터를 스트리밍하는 것이 더 쉬울 수 있습니다.

지연 변경 데이터와 급변하는 데이터 비교. 데이터를 거의 실시간으로 수집하고 분석해야 하는 경우에는 데이터 스트리밍을 사용하는 것이 좋습니다. 스트리밍을 사용하면 각 레코드가 도착하자마자 데이터를 쿼리할 수 있습니다. DML 문을 사용하여 다수의 개별 행 업데이트 또는 삽입을 제출하지 마세요. 자주 업데이트되는 데이터의 경우 변경 로그를 스트리밍하고 뷰를 사용하여 최신 결과를 얻는 것이 더 나은 경우가 많습니다. 또 다른 옵션은 Cloud SQL을 온라인 트랜잭션 처리(OLTP) 데이터베이스로 사용하고 통합 쿼리를 사용하여 BigQuery의 데이터에 조인하는 것입니다.

소스 데이터가 느리게 변경되거나 지속적으로 업데이트되는 결과가 필요하지 않으면 로드 작업을 사용하는 것이 좋습니다. 예를 들어 데이터를 사용하여 일일 또는 시간별 보고서를 실행하는 경우 로드 작업에 비용이 적게 들 수 있으며 시스템 리소스를 더 적게 사용할 수 있습니다.

또 다른 시나리오는 가끔 발생하거나 이벤트에 응답하는 데이터입니다. 이 경우 Dataflow를 사용하여 데이터를 스트리밍하거나 Cloud Functions를 사용하여 트리거에 대한 응답으로 스트리밍 API를 호출하는 것이 좋습니다.

솔루션 안전성. BigQuery에는 서비스수준계약(SLA)이 적용됩니다. 또한 구현하는 특정 솔루션의 안정성도 고려해야 합니다. 다음 사항을 고려하세요.

  • JSON 또는 CSV와 같이 느슨하게 유형이 지정된 형식을 사용하면 부적합 데이터로 인해 전체 로드 작업이 실패할 수 있습니다. 로드하기 전에 데이터 정리 단계가 필요한지 확인하고 오류에 어떻게 응답해야 하는지 고려하세요. 또한 Avro, ORC, Parquet와 같이 강력하게 유형이 지정된 형식을 사용하는 것이 좋습니다.
  • 정기적 로드 작업에는 Cloud Composer, 크론 또는 다른 도구를 사용하여 예약을 수행해야 합니다. 예약 구성요소는 솔루션의 장애 지점일 수 있습니다.
  • 스트리밍을 사용하면 각 레코드의 성공 여부를 확인하고 오류를 신속하게 보고할 수 있습니다. 나중에 분석하고 처리할 수 있도록 처리되지 않은 메시지 큐에 실패한 메시지를 작성하는 것이 좋습니다. BigQuery 스트리밍 오류에 대한 자세한 내용은 스트리밍 삽입 문제 해결을 참조하세요.
  • 스트리밍 및 로드 작업에는 할당량이 적용됩니다. 할당량 오류를 처리하는 방법에 대한 자세한 내용은 BigQuery 할당량 오류 문제 해결을 참조하세요.
  • 타사 솔루션은 구성 가능성, 안정성, 순서 보장, 기타 요소에 따라 다를 수 있으므로 이들을 고려한 후에 솔루션을 채택합니다.

지연 시간. 로드하는 데이터 양과 필요한 데이터가 얼마나 빨리 제공되는지 고려합니다. 스트리밍에서 분석에 사용 가능하면서 지연 시간이 가장 짧은 데이터를 제공합니다. 정기적 로드 작업에서는 각 로드 작업이 완료된 후에만 새 데이터를 사용할 수 있으므로 지연 시간이 더 깁니다.

로드 작업은 기본적으로 슬롯의 공유 풀을 사용합니다. 특히 매우 많은 데이터 양을 로드하는 경우 슬롯을 사용할 수 있을 때까지 로드 작업이 대기 중 상태일 수 있습니다. 허용되지 않는 대기 시간이 생성되면 공유 슬롯 풀을 사용하는 대신 전용 슬롯을 구매할 수 있습니다. 자세한 내용은 예약 소개를 참조하세요.

외부 데이터 소스의 쿼리 성능은 BigQuery에 저장된 데이터의 쿼리 성능보다 낮을 수 있습니다. 쿼리 지연 시간 최소화가 중요한 경우에는 데이터를 BigQuery에 로드하는 것이 좋습니다.

데이터 수집 형식. 다음 요소를 기준으로 데이터 수집 형식을 선택합니다.

  • 스키마 지원. Avro, ORC, Parquet, Firestore 내보내기는 자체 설명적 형식입니다. BigQuery는 소스 데이터를 기준으로 테이블 스키마를 자동으로 만듭니다. JSON 및 CSV 데이터의 경우 명시적 스키마를 제공하거나 스키마 자동 감지를 사용할 수 있습니다.

  • 플랫 데이터 또는 중첩 및 반복 필드. Avro, CSV, JSON, ORC, Parquet는 모두 플랫 데이터를 지원합니다. Avro, JSON, ORC, Parquet, Firestore 내보내기는 중첩 및 반복 필드가 있는 데이터도 지원합니다. 중첩 및 반복 데이터는 계층구조 데이터를 표현할 때 유용합니다. 중첩 및 반복 필드는 데이터를 비정규화할 때 중복을 줄여주는 역할도 합니다.

  • 삽입된 줄바꿈. JSON 파일에서 데이터를 로드하는 경우 행은 줄바꿈으로 구분해야 합니다. BigQuery는 줄바꿈으로 구분된 JSON 파일에 한 줄당 하나의 레코드가 포함된 것으로 예상합니다.

  • 인코딩. BigQuery는 중첩 또는 반복 데이터, 그리고 플랫 데이터에서 모두 UTF-8 인코딩을 지원합니다. BigQuery는 CSV 파일에서만 플랫 데이터용 ISO-8859-1 인코딩을 지원합니다.

비정규화, 중첩, 반복 데이터 로드

많은 개발자는 관계형 데이터베이스와 정규화된 데이터 스키마를 사용하는 작업에 익숙합니다. 정규화는 중복 데이터가 저장되지 않도록 하며, 데이터가 정기적으로 업데이트되는 경우 일관성을 제공합니다.

비정규화는 이전에 정규화된 관계형 데이터 세트의 읽기 성능을 높이기 위한 일반적인 전략입니다. BigQuery에서 데이터를 비정규화할 때는 중첩되고 반복되는 입력란을 사용하는 것이 좋습니다. 이 전략은 관계가 계층적이며 부모-자식 관계와 같이 자주 쿼리되는 경우 사용하는 것이 가장 좋습니다.

현대적인 시스템에서는 정규화된 데이터 사용에 따른 스토리지 비용 절감 효과가 크지 않습니다. 비정규화된 데이터 사용은 스토리지 비용을 높이지만 이를 상쇄하는 성능상의 이점을 제공합니다. 조인에는 데이터 조정(통신 대역폭)이 필요합니다. 비정규화는 데이터를 개별 슬롯에 로컬화하므로 병렬 실행이 가능합니다.

데이터의 비정규화와 동시에 관계를 유지해야 한다면 데이터를 완전히 병합하는 대신 중첩 및 반복 필드를 사용하면 됩니다. 관계형 데이터가 완전히 병합되면 네트워크 통신(무작위 섞기)이 쿼리 성능에 악영향을 줄 수 있습니다.

예를 들어 중첩 및 반복 필드를 사용하지 않고 주문 스키마를 비정규화하면(일대다 관계가 존재하는 경우) order_id처럼 필드별로 그룹화해야 할 수도 있습니다. 무작위 섞기가 동원되기 때문에 데이터 그룹화는 중첩 및 반복 필드를 이용한 데이터 비정규화보다 효과가 떨어집니다.

중첩 및 반복 필드로 데이터를 비정규화해도 성능이 향상되지 않을 수 있습니다. 다음과 같은 사용 사례에는 비정규화를 적용해서는 안 됩니다.

  • 크기가 자주 바뀌는 스타 스키마가 있습니다.
  • BigQuery가 행 수준 변형으로 OLTP(온라인 트랜잭션 처리) 시스템을 보완하지만 대체하지는 못합니다.

중첩 및 반복 필드는 다음과 같은 데이터 형식에서 지원됩니다.

  • Avro
  • JSON(줄바꿈으로 구분)
  • ORC
  • Parquet
  • Datastore 내보내기
  • Firestore 내보내기

데이터 로드 시 스키마의 중첩 및 반복 필드 지정에 대한 자세한 내용은 중첩 및 반복 필드 지정을 참조하세요.

다른 Google 서비스에서 데이터 로드

BigQuery Data Transfer Service

BigQuery Data Transfer Service는 다음 서비스에서 BigQuery로 데이터를 로드하는 과정을 자동화합니다.

Google Software as a Service(SaaS) 앱 외부 클라우드 스토리지 제공업체 데이터 웨어하우스 또한 Google Cloud Marketplace에서 몇 가지 타사 전송(베타)을 사용할 수 있습니다.

데이터 전송을 구성하면 BigQuery Data Transfer Service는 소스 앱에서 BigQuery로 반복되는 데이터 로드를 자동으로 예약 및 관리합니다.

Google 애널리틱스 360

Google 애널리틱스 360 보고서 보기에서 BigQuery로 세션과 히트 데이터를 내보내는 방법을 알아보려면 애널리틱스 고객센터의 BigQuery 내보내기를 참조하세요.

BigQuery의 애널리틱스 데이터를 쿼리하는 예시에 대해서는 애널리틱스 도움말의 BigQuery 설명서를 참조하세요.

Dataflow

Dataflow는 BigQuery로 직접 데이터를 로드할 수 있습니다. Dataflow를 사용하여 BigQuery에서 데이터를 읽고 쓰는 방법에 대한 자세한 내용은 Apache Beam 문서의 BigQuery I/O 커넥터를 참조하세요.

데이터 로드의 대안

다음과 같은 상황에서는 쿼리를 실행하기 전에 데이터를 로드할 필요가 없습니다.

공개 데이터 세트
공개 데이터 세트는 BigQuery에 저장되고 일반 대중에 공유되는 데이터 세트입니다. 자세한 내용은 BigQuery 공개 데이터세트를 참조하세요.
공유 데이터세트
BigQuery에 저장된 데이터세트를 공유할 수 있습니다. 다른 사람이 데이터세트를 공유한 경우 데이터를 로드하지 않고도 해당 데이터세트를 쿼리할 수 있습니다.
외부 데이터 소스
외부 데이터 소스에서 데이터를 쿼리하면 데이터 로드 프로세스를 건너뛸 수 있습니다. 이 방법을 사용하면 다른 곳에 저장된 데이터를 이동하지 않고도 BigQuery의 분석 기능을 활용할 수 있습니다. 이 방법의 이점과 제한사항에 대한 자세한 내용은 외부 데이터 소스를 참조하세요.
파일 로깅
Cloud Logging은 BigQuery로 로그 파일을 내보내는 옵션을 제공합니다. 자세한 내용은 로그 뷰어로 내보내기를 참조하세요.

다음 단계