Cloud Storage에서 데이터를 로드하는 방법 소개

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

개요

Cloud Storage에서 BigQuery로 데이터를 로드할 때 허용되는 데이터 형식은 다음과 같습니다.

  • 쉼표로 구분된 값(CSV)
  • JSON(줄바꿈으로 구분)
  • Avro
  • Parquet
  • ORC
  • Datastore 내보내기
  • Firestore 내보내기

BigQuery Data Transfer Service는 Cloud Storage에서 BigQuery로 로드를 반복하는 기능을 지원합니다.

BigQuery는 다음 Cloud Storage 스토리지 클래스에서 데이터 로드를 지원합니다.

  • Standard
  • Nearline
  • Coldline
  • Archive

위치 고려사항

데이터 위치를 선택할 때는 다음 사항을 고려해야 합니다.

  • 데이터 로드용 Cloud Storage 버킷을 같은 위치에 배치합니다.
    • BigQuery 데이터세트가 멀티 리전 위치에 있는 경우 로드하는 데이터가 포함된 Cloud Storage 버킷은 같은 위치의 리전이나 멀티 리전 버킷에 있어야 합니다. 예를 들어 BigQuery 데이터세트가 EU에 있으면 Cloud Storage 버킷은 EU 내 리전 또는 멀티 리전 버킷에 있어야 합니다.
    • 데이터세트가 리전 위치에 있는 경우, Cloud Storage 버킷은 같은 위치의 리전 버킷에 있어야 합니다. 예를 들어 데이터세트가 도쿄 리전에 있으면 Cloud Storage 버킷은 도쿄 내 리전 버킷에 있어야 합니다.
    • 예외: 데이터세트가 US 멀티 리전 위치에 있는 경우 모든 리전 내 또는 멀티 리전 위치에 있는 Cloud Storage 버킷에서 데이터를 로드할 수 있습니다.
  • 데이터 관리 계획을 세웁니다.
    • BigQuery 데이터세트 또는 Cloud Storage 버킷과 같은 Regional Storage 리소스를 선택한 경우 데이터를 지리적으로 관리하기 위한 계획을 세웁니다.

Cloud Storage 위치에 대한 자세한 내용은 Cloud Storage 문서의 버킷 위치를 참조하세요.

다른 위치 간 BigQuery 데이터 이동

데이터세트가 생성된 후에는 데이터세트 위치를 변경할 수 없지만 데이터세트를 복사할 수 있습니다. 한 위치에서 다른 위치로 데이터세트를 옮길 수 없지만 수동으로 데이터세트를 이동(재생성)할 수는 있습니다.

데이터세트 복사

리전 간 복사를 비롯해 데이터 세트를 복사하는 단계를 알아보려면 데이터 세트 복사를 참조하세요.

데이터 세트 이동

데이터세트를 수동으로 한 위치에서 다른 위치로 옮기려면 다음 절차를 따르세요.

  1. 데이터세트와 같은 위치 내 리전 또는 멀티 리전 Cloud Storage 버킷으로 BigQuery 테이블의 데이터를 내보냅니다. 예를 들어 데이터세트가 EU 멀티 리전 위치에 있는 경우 EU 내 리전 또는 멀티 리전 버킷으로 데이터를 내보냅니다.

    BigQuery에서 데이터를 내보내는 경우에는 요금이 청구되지 않지만 Cloud Storage에 내보낸 데이터를 저장하는 경우에는 요금이 청구됩니다. BigQuery 내보내기를 사용하는 경우 내보내기 작업의 제한사항이 적용됩니다.

  2. Cloud Storage 버킷의 데이터를 새 위치 내 리전 또는 멀티 리전 버킷으로 복사하거나 옮깁니다. 예를 들어 US 멀티 리전 위치의 데이터를 도쿄 리전 위치로 이동하는 경우 데이터를 도쿄 내 리전 버킷으로 전송합니다. Cloud Storage 객체 전송에 대한 자세한 내용은 Cloud Storage 문서의 객체 이름 변경, 복사, 이동을 참조하세요.

    리전 간에 데이터를 전송하면 Cloud Storage에 네트워크 이그레스 요금이 청구됩니다.

  3. 새 위치의 Cloud Storage 버킷으로 데이터를 전송한 후 새 위치에서 새로운 BigQuery 데이터세트를 만듭니다. 그런 다음 Cloud Storage 버킷의 데이터를 BigQuery로 로드합니다.

    BigQuery로 데이터를 로드하는 경우에는 요금이 청구되지 않지만 데이터 또는 버킷을 삭제하기 전에 데이터를 Cloud Storage에 저장하면 요금이 청구됩니다. 데이터를 로드한 후 BigQuery에 데이터를 저장하는 경우에도 요금이 청구됩니다. BigQuery로 데이터를 로드하는 경우 로드 작업의 제한사항이 적용됩니다.

Cloud Storage를 사용하여 대규모 데이터세트를 저장 및 이동하는 방법에 대한 자세한 내용은 빅데이터에 Cloud Storage 사용을 참조하세요.

제한사항

Cloud Storage 버킷에서 BigQuery로 데이터를 로드할 때는 다음과 같은 제한사항이 적용됩니다.

  • 데이터세트 위치가 US 이외의 값으로 설정된 경우 리전별 또는 멀티 리전 Cloud Storage 버킷이 데이터세트와 동일한 리전에 있어야 합니다.
  • BigQuery는 외부 데이터 소스의 데이터 일관성을 보장하지 않습니다. 쿼리가 실행되는 동안 기본 데이터가 변경되면 예상치 못한 동작이 발생할 수 있습니다.

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

Cloud Storage URI 검색

Cloud Storage 데이터 소스에서 데이터를 로드하려면 Cloud Storage URI를 제공해야 합니다.

Cloud Storage URI는 버킷 이름과 객체(파일 이름)로 구성됩니다. 예를 들어 Cloud Storage 버킷 이름이 mybucket이고 데이터 파일 이름이 myfile.csv라면 버킷 URI는 gs://mybucket/myfile.csv가 됩니다. 데이터가 여러 개의 파일로 분리되어 있으면 URI에 와일드 카드를 사용할 수 있습니다. 자세한 내용은 Cloud Storage 요청 URI를 참조하세요.

BigQuery는 처음 이중 슬래시 다음에 슬래시 여러 개가 연속으로 포함된 소스 URI를 지원하지 않습니다. Cloud Storage 객체 이름에는 연속된 슬래시('/') 문자 여러 개가 포함될 수 있습니다. 하지만 BigQuery는 연속된 슬래시 여러 개를 단일 슬래시로 변환합니다. 예를 들어 소스 URI gs://bucket/my//object//name은 Cloud Storage에서는 유효하지만 BigQuery에서는 작동하지 않습니다.

Cloud Storage URI를 가져오려면 다음 안내를 따르세요.

  1. Cloud Storage Console을 엽니다.

    Cloud Storage Console

  2. 소스 데이터가 포함된 객체(파일) 위치로 이동합니다.

  3. Cloud Storage Console 맨 위에서 객체 경로를 확인합니다. URI를 만들기 위해 gs://bucket/file을 적절한 경로로 바꿉니다(예: gs://mybucket/myfile.json). bucket은 Cloud Storage 버킷 이름이고 file은 데이터가 포함된 객체(파일) 이름입니다.

필수 권한

BigQuery에 데이터를 로드할 때는 로드 작업을 실행할 수 있는 권한과 새로 만들거나 기존에 있던 BigQuery 테이블 및 파티션에 데이터를 로드할 수 있는 권한이 필요합니다. Cloud Storage에서 데이터를 로드할 경우 데이터가 포함된 버킷에 대한 액세스 권한도 필요합니다.

BigQuery 권한

BigQuery에 데이터를 로드하려면 최소한 다음 권한이 필요합니다. 이들 권한은 새로운 테이블 또는 파티션에 데이터를 로드할 때나 테이블 또는 파티션을 추가하거나 덮어쓸 때 필요합니다.

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.jobs.create

다음과 같은 사전 정의된 IAM 역할에는 bigquery.tables.createbigquery.tables.updateData 권한이 모두 포함되어 있습니다.

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

다음과 같은 사전 정의된 IAM 역할에는 bigquery.jobs.create 권한이 포함되어 있습니다.

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

또한 bigquery.datasets.create 권한이 있는 사용자는 데이터세트를 만들 때 해당 데이터세트에 대한 bigquery.dataOwner 액세스 권한을 부여받습니다. bigquery.dataOwner 액세스 권한이 있는 사용자는 로드 작업을 사용하여 데이터 세트에서 테이블을 만들고 업데이트할 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

Cloud Storage 권한

Cloud Storage 버킷에서 데이터를 로드하려면 storage.objects.get 권한을 부여받아야 합니다. URI 와일드 카드를 사용하는 경우에는 storage.objects.list 권한도 있어야 합니다.

사전 정의된 IAM 역할 storage.objectViewer가 부여되면 storage.objects.getstorage.objects.list 권한이 모두 제공됩니다.

Cloud Storage 액세스 및 스토리지 로그

Cloud Storage는 분석을 위해 BigQuery로 직접 가져올 수 있는 CSV 형식의 액세스 및 스토리지 로그 파일을 제공합니다. Cloud Storage 로그를 로드 및 분석하는 방법에 대한 자세한 내용은 Cloud Storage 문서의 액세스 로그 및 스토리지 로그를 참조하세요.

Cloud Storage URI의 와일드 카드 지원

Cloud Storage 데이터가 공통된 기본 이름을 공유하는 여러 파일로 분리되어 있는 경우, 데이터를 로드할 때 URI에 와일드 카드를 사용할 수 있습니다.

Cloud Storage URI에 와일드 카드를 추가하려면 기본 이름에 별표(*)를 추가합니다. 예를 들어 fed-sample000001.csvfed-sample000002.csv라는 두 개의 파일이 있는 경우 버킷 URI는 gs://mybucket/fed-sample*입니다. 그런 다음 Cloud Console, 기본 웹 UI, bq 명령줄 도구, API 또는 클라이언트 라이브러리에서 이 와일드 카드 URI를 사용할 수 있습니다.

와일드 카드는 버킷 내의 객체(파일 이름)에 하나만 사용할 수 있습니다. 와일드 카드는 객체 이름 중간이나 끝에 입력할 수 있습니다. 버킷 이름에는 와일드 카드를 추가할 수 없습니다.

Google Datastore 내보내기의 경우 URI를 하나만 지정할 수 있으며 .backup_info 또는 .export_metadata로 끝나야 합니다.

다음과 같은 경우 별표 와일드 카드 문자가 허용되지 않습니다.

  • Datastore 또는 Firestore 내보내기에 연결된 외부 테이블을 만드는 경우
  • Cloud Storage에서 Datastore 또는 Firestore 내보내기 데이터를 로드하는 경우

다음 단계

데이터 형식별로 해당 문서를 참조하여 Cloud Storage에서 BigQuery로 데이터를 로드하는 방법을 알아보세요.

Cloud Storage에서 BigQuery로 로드를 반복하는 방법은 Cloud Storage 전송을 참조하세요.