데이터 로드 소개

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

개요

데이터를 로드하지 않고 쿼리할 수 있는 상황이 많이 있습니다. 그 외의 모든 상황에서는 쿼리를 실행하려면 먼저 BigQuery에 데이터를 로드해야 합니다.

BigQuery에 데이터를 로드하기 위해서는 다음을 수행할 수 있습니다.

  • Cloud Storage 또는 로컬 파일에서 데이터 레코드 집합을 로드합니다. 레코드는 Avro, CSV, JSON(줄바꿈으로만 구분됨), ORC, Parquet 형식일 수 있습니다.
  • Datastore 또는 Firestore에서 데이터를 내보내고 내보낸 데이터를 BigQuery에 로드합니다.
  • 다른 Google 서비스(예: Google Ad Manager 및 Google Ads)에서 데이터를 로드합니다.
  • 스트리밍 삽입을 사용하여 한 번에 레코드 하나씩 데이터를 스트리밍합니다.
  • Dataflow 파이프라인에서 BigQuery로 데이터를 씁니다.
  • DML 문을 사용하여 대량 삽입을 수행합니다. BigQuery는 DML 쿼리에 요금을 부과합니다. DML 가격 책정을 참조하세요.

현재 드라이브에서 BigQuery로 데이터를 로드할 수 없지만 외부 테이블을 사용하여 드라이브의 데이터를 쿼리할 수 있습니다.

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

제한사항

BigQuery에 데이터 로드할 때는 소스 데이터의 위치 및 형식에 따라 몇 가지 제한사항이 적용됩니다.

데이터 수집 형식 선택

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

  • 스키마 지원.

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

  • 플랫 데이터 또는 중첩 및 반복된 필드.

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

  • 삽입된 줄바꿈

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

  • 인코딩.

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

  • 외부 제한.

    기본적으로 JSON 형식으로 데이터를 저장하는 문서 저장 데이터베이스에서 데이터를 가져오는 경우가 있습니다. 또는 CSV 형식으로만 데이터를 내보내는 소스에서 데이터를 가져오는 경우도 있습니다.

압축 및 비압축 데이터 로드

압축 및 비압축 데이터를 로드하는 데 권장되는 형식은 Avro 바이너리 형식입니다. Avro 데이터는 데이터 블록이 압축된 경우에도 데이터를 병렬로 읽을 수 있으므로 더 빠르게 로드됩니다. 압축된 Avro 파일은 지원되지 않지만 압축된 데이터 블록은 지원됩니다. BigQuery는 Avro 파일의 압축된 데이터 블록에 DEFLATE 및 Snappy 코덱을 지원합니다.

또한 Parquet의 효율적인 열 단위 인코딩은 일반적으로 더 높은 압축 비율과 더 작은 파일 크기로 이어지므로 Parquet 바이너리 형식은 좋은 선택입니다. 또한 Parquet 파일은 파일을 병렬로 로드할 수 있는 압축 기술을 활용합니다. 압축된 Parquet 파일은 지원되지 않지만 압축된 데이터 블록은 지원됩니다. BigQuery는 Parquet 파일의 압축된 데이터 블록에 Snappy, GZip, and LZO_1X 코덱을 지원합니다.

ORC 바이너리 형식은 Parquet 형식과 비슷한 이점을 제공합니다. ORC 파일의 데이터는 데이터 스트라이프를 병렬로 읽을 수 있으므로 로드 속도가 빠릅니다. 각 데이터 스트라이프의 행은 순차적으로 로드됩니다. 로드 시간을 최적화하려면 약 256MB 이하의 데이터 스트라이프를 사용하세요. 압축된 ORC 파일은 지원되지 않지만 압축된 파일 바닥글과 스트라이프는 지원됩니다. BigQuery는 ORC 파일 바닥글 및 스트라이프에 Zlib, Snappy, LZO, LZ4 압축을 지원합니다.

비압축 파일은 병렬로 읽을 수 있으므로 CSV 및 JSON과 같은 다른 데이터 형식의 경우 BigQuery는 압축 파일보다 비압축 파일을 훨씬 더 빠르게 로드할 수 있습니다. 비압축 파일은 용량이 더 크므로 비압축 파일 사용 시 대역폭 제한이 발생하거나 Cloud Storage에 준비된 데이터의 경우 BigQuery로 로드되기 전에 Cloud Storage 비용 상승을 유발할 수 있습니다. 압축된 파일이나 압축되지 않은 파일의 라인 정렬은 보장되지 않습니다. 사용 사례에 따라 이러한 장단점을 고려하는 것이 중요합니다.

일반적으로 대역폭이 제한된 경우 gzip을 사용하여 CSV 및 JSON 파일을 압축한 후 Cloud Storage에 업로드하세요. 현재 BigQuery로 데이터를 로드할 때 CSV 및 JSON 파일에 지원되는 유일한 파일 압축 유형은 gzip입니다. 앱의 로딩 속도가 중요하고 데이터를 로드할 대역폭이 넉넉하다면 파일을 압축되지 않은 상태로 유지하세요.

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

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

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에 저장된 데이터세트를 공유할 수 있습니다. 다른 사람이 데이터세트를 공유한 경우 데이터를 로드하지 않고도 해당 데이터세트를 쿼리할 수 있습니다.
외부 데이터 소스
외부 데이터 소스를 기반으로 하는 테이블을 만들어 데이터 로드 프로세스를 건너뛸 수 있습니다. 이 방법의 이점과 제한사항에 대한 자세한 내용은 외부 데이터 소스를 참조하세요.
파일 로깅
Cloud Logging은 BigQuery로 로그 파일을 내보내는 옵션을 제공합니다. 자세한 내용은 로그 뷰어로 내보내기를 참조하세요.

데이터 로드의 또 다른 대안은 한 번에 레코드 한 개씩 데이터를 스트리밍하는 방법입니다. 일반적으로 스트리밍은 즉각적인 데이터 가용성이 필요한 경우 사용됩니다. 스트리밍에 대한 자세한 내용은 BigQuery로 데이터 스트리밍을 참조하세요.

할당량 정책

데이터 로드의 할당량 정책에 대한 자세한 내용은 할당량 및 한도 페이지의 로드 작업을 참조하세요.

가격 책정

현재 BigQuery로 데이터를 로드하는 데는 비용이 청구되지 않습니다. 자세한 내용은 가격 책정 페이지를 참조하세요.

다음 단계