BigQuery로 데이터 로드 소개

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

개요

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

다음 방법으로 데이터를 로드할 수 있습니다.

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

새 테이블 또는 파티션으로 데이터를 로드할 수 있으며 기존 테이블 또는 파티션에 데이터를 추가하거나 테이블 또는 파티션을 덮어쓸 수 있습니다. 파티션을 사용한 작업에 대한 자세한 내용은 파티션을 나눈 테이블 관리를 참조하세요.

데이터를 BigQuery로 로드하면 테이블 또는 파티션 스키마를 제공할 수 있으며, 지원되는 데이터 형식인 경우에는 스키마 자동 감지를 사용할 수 있습니다.

제한사항

BigQuery에 데이터를 로드하는 경우, 다음 제한사항이 적용됩니다.

  • 현재 Cloud Storage 또는 읽을 수 있는 데이터 소스(예: 로컬 머신)의 데이터만 BigQuery에 로드할 수 있습니다.

소스 데이터의 위치와 형식에 따라 추가 제한사항이 적용될 수 있습니다. 자세한 내용은 다음을 참조하세요.

지원되는 데이터 형식

BigQuery는 Cloud Storage 및 읽을 수 있는 데이터 소스에서 다음 형식의 데이터 로드를 지원합니다.

데이터 로드의 기본 소스 형식은 CSV입니다. 지원되는 다른 형식 중 하나로 저장된 데이터를 로드하려면 형식을 명시적으로 지정하세요. BigQuery에 로드한 데이터는 Capacitor용 열 형식(BigQuery의 저장소 형식)으로 변환됩니다.

데이터 수집 형식 선택

다양한 형식으로 BigQuery에 데이터를 로드할 수 있습니다. BigQuery에 로드한 데이터는 Capacitor용 열 형식(BigQuery의 저장소 형식)으로 변환됩니다.

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

  • 데이터 스키마.

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

  • 삽입된 줄바꿈.

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

  • 외부 제한.

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

인코딩된 데이터 로드

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

문자 인코딩

기본적으로 BigQuery 서비스에서는 모든 소스 데이터가 UTF-8로 인코딩되는 것으로 예상합니다. CSV 파일에 ISO-8859-1 형식으로 인코딩된 데이터가 있는 경우 데이터를 가져올 때 인코딩을 명시적으로 지정해야 합니다. 그래야 BigQuery에서 가져오기 프로세스 중에 데이터를 UTF-8로 올바르게 변환할 수 있습니다. 현재 ISO-8859-1 또는 UTF-8로 인코딩된 데이터만 가져올 수 있습니다. 데이터의 문자 인코딩을 지정하는 경우 다음 사항을 염두에 두어야 합니다.

  • 인코딩을 지정하지 않은 경우 또는 데이터를 UTF-8로 명시적으로 지정했지만 UTF-8로 인코딩되지 않은 CSV 파일을 제공하는 경우 BigQuery는 CSV 파일을 UTF-8로 변환하기 위해 시도합니다.

    일반적으로 데이터를 가져오는 데는 문제가 없지만 예상하는 것과 바이트 단위까지 일치하지는 않을 수 있습니다. 이런 문제를 방지하려면 올바른 인코딩을 지정하고 데이터를 다시 가져오세요.

  • 구분 기호는 ISO-8859-1로 인코딩되어야 합니다.

    일반적인 권장사항은 탭, 파이프 또는 쉼표와 같은 표준 구분 기호를 사용하는 것입니다.

  • BigQuery에서 문자를 변환할 수 없는 경우 이 문자는 표준 유니코드 대체 문자(�)로 변환됩니다.
  • JSON 파일은 항상 UTF-8로 인코딩되어야 합니다.

API를 사용하여 ISO-8859-1 인코딩된 플랫 데이터를 로드하려는 경우 configuration.load.encoding 속성을 지정하세요.

압축 및 비압축 데이터 로드

압축 데이터를 로드하는 데 선호되는 형식은 Avro 바이너리 형식입니다. Avro 데이터는 데이터 블록이 압축된 경우에도 데이터를 병렬로 읽을 수 있으므로 더 빠르게 로드됩니다.

또한 Parquet의 효율적인 열 단위 인코딩은 일반적으로 더 높은 압축 비율과 더 작은 파일 크기로 이어지므로 Parquet 바이너리 형식은 좋은 선택입니다. 또한 Parquet 파일은 파일을 병렬로 로드할 수 있는 압축 기술을 활용합니다.

ORC 바이너리 형식은 Parquet 형식과 비슷한 이점을 제공합니다. ORC 파일로 된 데이터는 데이터 스트라이프를 병렬로 읽을 수 있으므로 로드 속도가 빠릅니다. 각 데이터 스트라이프의 행은 순차적으로 로드됩니다. 로드 시간을 최적화하려면 약 256MB 이하의 데이터 스트라이프를 사용하세요.

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

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

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

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

BigQuery는 데이터가 비정규화된 상태에서 최적의 성능을 제공합니다. 별표나 눈송이 스키마 같은 관계형 스키마를 유지하는 대신 데이터를 비정규화하고 중첩 및 반복 필드를 활용하세요. 중첩 및 반복 필드는 관계형(정규화) 스키마를 유지할 때처럼 성능에 영향을 주지 않고도 관계를 유지할 수 있습니다.

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

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

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

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

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

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

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

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

스키마 자동 감지

BigQuery로 데이터를 로드하거나 외부 데이터 소스를 쿼리하면 스키마 자동 감지를 사용할 수 있습니다.

자동 감지를 사용하도록 설정하면 BigQuery는 데이터 소스에서 무작위 파일을 선택하고 최대 100행의 데이터를 스캔해서 대표 샘플로 사용하여 추론 프로세스를 시작합니다. BigQuery는 이후 각 필드를 살펴보고 샘플 값을 기준으로 해당 필드에 데이터 유형을 할당합니다.

JSON 또는 CSV 파일을 로드할 때 스키마 자동 감지를 사용할 수 있습니다. Cloud Datastore 내보내기, Cloud Firestore 내보내기, Avro 파일, Parquet 파일 또는 ORC 파일의 경우 이러한 형식이 스키마 정보에 자체 기술되므로 스키마 자동 감지를 사용할 수 없습니다.

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

BigQuery Data Transfer Service

BigQuery Data Transfer Service는 자동으로 다음 Google 서비스에서 BigQuery로 데이터를 로드합니다.

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

Google 애널리틱스 360

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

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

Cloud Storage

BigQuery는 Cloud Storage에서 데이터를 로드할 수 있습니다. 자세한 내용은 Cloud Storage에서 데이터 로드를 참조하세요.

Cloud Datastore

BigQuery는 Cloud Datastore 내보내기에서 데이터를 로드할 수 있습니다. 자세한 내용은 Cloud Datastore 내보내기에서 데이터 로드를 참조하세요.

Cloud Firestore

BigQuery는 Cloud Firestore 내보내기에서 데이터를 로드할 수 있습니다. 자세한 내용은 Cloud Firestore 내보내기에서 데이터 로드를 참조하세요.

Google Cloud Dataflow

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

데이터 로드의 대안

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

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

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

할당량 정책

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

가격 책정

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

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.