테이블 데이터 내보내기

이 페이지에서는 BigQuery 테이블에서 데이터를 내보내는 방법을 설명합니다.

데이터를 BigQuery에 로드한 후에 여러 가지 형식으로 데이터를 내보낼 수 있습니다. BigQuery는 최대 1GB의 데이터를 하나의 파일로 내보낼 수 있습니다. 1GB가 넘는 데이터를 내보내려면 데이터를 여러 파일로 내보내야 합니다. 데이터를 여러 파일로 내보내면 파일 크기가 달라집니다.

Cloud Dataflow와 같은 서비스를 사용하면 데이터를 수동으로 내보내지 않고 BigQuery에서 읽을 수 있습니다. Cloud Dataflow를 사용하여 BigQuery에서 읽기 및 쓰기에 대한 자세한 내용은 Apache Beam 문서의 BigQuery I/O를 참조하세요.

필수 권한

  • 내보낼 데이터가 포함된 데이터세트에 대한 READER 액세스 권한이 있는지 확인합니다. 아니면 bigquery.dataViewer, bigquery.dataOwner, bigquery.dataEditor 또는 bigquery.admin과 같은 bigquery.tables.export 권한을 제공하는 사전 정의된 프로젝트 수준의 BigQuery IAM 역할을 사용할 수도 있습니다. 프로젝트 수준에서 IAM 역할을 할당하면 해당 사용자 또는 그룹은 프로젝트 내 모든 테이블에 대한 bigquery.tables.export 권한을 갖게 됩니다.
  • Cloud Storage 버킷에 대한 WRITER 권한이 있는지 또는 버킷에 객체를 쓸 수 있는 권한을 부여하는 사전 정의된 IAM 역할이 할당되어 있는지 확인합니다. BigQuery의 데이터는 Cloud Storage 버킷으로만 내보낼 수 있습니다. Cloud Storage IAM 역할에 대한 자세한 내용은 Cloud Storage IAM 역할을 참조하세요.
  • 내보내기 작업을 실행하려면 bigquery.jobs.create 권한이 있어야 합니다. 다음과 같은 사전 정의된 IAM 역할 중 하나를 부여하여 프로젝트 수준에서 bigquery.jobs.create 권한을 설정할 수 있습니다.

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

내보내기 제한

BigQuery에서 데이터를 내보낼 때 다음 사항에 유의하세요.

  • 테이블 데이터를 로컬 파일, Google 스프레드시트 또는 Google 드라이브로 내보낼 수 없습니다. 유일하게 지원되는 내보내기 위치는 Cloud Storage입니다. 쿼리 결과 저장에 대한 정보는 쿼리 결과 다운로드 및 저장을 참조하세요.
  • 최대 1GB의 테이블 데이터를 단일 파일로 내보낼 수 있습니다. 1GB가 넘는 데이터를 내보내려면 와일드 카드를 사용하여 데이터를 여러 파일로 내보내세요. 데이터를 여러 파일로 내보내면 파일 크기가 달라집니다.
  • 중첩되거나 반복되는 데이터는 CSV 형식으로 내보낼 수 없습니다. 중첩 및 반복되는 데이터는 Avro 및 JSON 내보내기가 지원됩니다.
  • 데이터를 JSON 형식으로 내보내는 경우, 다른 시스템에서 데이터를 읽을 때 64비트 정밀도를 유지하기 위해서 INT64(정수) 데이터 유형이 JSON 문자열로 인코딩됩니다.
  • 여러 테이블의 데이터를 단일 내보내기 작업으로 내보낼 수 없습니다.
  • 파티션을 나눈 테이블에서 데이터를 내보내는 경우에는 개별 파티션을 내보낼 수 없습니다.
  • GCP Console 또는 기존 BigQuery 웹 UI를 사용하여 데이터를 내보내는 경우에는 GZIP 이외의 압축 유형을 선택할 수 없습니다.

위치 고려 사항

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

  • 데이터를 내보내기 위한 Cloud Storage 버킷을 같은 위치에 배치합니다.
    • 데이터를 내보내는 경우, 지역 내 또는 다중 지역 Cloud Storage 버킷은 BigQuery 데이터세트와 같은 위치에 있어야 합니다. 예를 들어, BigQuery 데이터세트가 EU 다중 지역 위치에 있으면 내보내는 데이터가 포함된 Cloud Storage 버킷은 EU 내 지역 또는 다중 지역 위치에 있어야 합니다.
    • 데이터세트가 지역 내 위치에 있는 경우, Cloud Storage 버킷은 같은 위치의 지역 버킷에 있어야 합니다. 예를 들어, 데이터세트가 도쿄 지역에 있으면 Cloud Storage 버킷은 도쿄 내 지역 버킷에 있어야 합니다.
    • 예외: 데이터세트가 US 다중 지역 위치에 있는 경우, 모든 지역 내 또는 다중 지역 위치 내 Cloud Storage 버킷으로 데이터를 내보낼 수 있습니다.
  • 데이터 관리 계획을 세웁니다.
    • BigQuery 데이터세트 또는 Cloud 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 사용을 참조하세요.

내보내기 형식 및 압축 유형

BigQuery는 내보낸 데이터에 대해 다음과 같은 데이터 형식 및 압축 유형을 지원합니다.

데이터 형식 지원되는 압축 유형 세부정보
CSV GZIP

--field_delimiter CLI 플래그 또는 configuration.extract.fieldDelimiter 추출 작업 속성을 사용하여 내보내는 데이터에서 CSV 구분 기호를 지정할 수 있습니다.

중첩 및 반복 데이터가 지원되지 않습니다.

JSON GZIP 중첩 및 반복 데이터가 지원됩니다.
Avro DEFLATE, SNAPPY

Avro 내보내기에는 GZIP 압축이 지원되지 않습니다.

중첩 및 반복 데이터가 지원됩니다.

BigQuery에 저장된 데이터 내보내기

BigQuery 웹 UI를 사용하거나, bq extract CLI 명령어를 사용하거나, API 또는 클라이언트 라이브러리를 통해 추출 작업을 제출하여 테이블 데이터를 내보낼 수 있습니다.

테이블 데이터 내보내기

BigQuery 테이블에서 데이터를 내보내는 방법은 다음과 같습니다.

Console

  1. GCP Console에서 BigQuery 웹 UI를 엽니다.
    BigQuery 웹 UI로 이동

  2. 탐색 패널의 리소스 섹션에서 프로젝트를 확장하고 데이터세트를 클릭하여 확장합니다. 내보낼 데이터가 포함된 테이블을 찾아서 클릭합니다.

  3. 창의 오른쪽에서 내보내기를 클릭한 다음 Cloud Storage로 내보내기를 선택합니다.

    데이터 내보내기

  4. Cloud Storage로 내보내기 대화상자에서 다음을 수행합니다.

    • Cloud Storage 위치 선택에서 데이터를 내보낼 버킷, 폴더 또는 파일을 찾습니다.
    • 내보내기 형식에 내보낸 데이터 형식(CSV, JSON(줄바꿈으로 구분) 또는 Avro)을 선택합니다.
    • 압축에 기본값인 None을 사용하거나 GZIP을 선택합니다. Avro 형식을 GZIP 압축과 함께 사용할 수 없습니다. Avro 데이터를 압축하려면 bq 명령줄 도구 또는 API를 사용하고 Avro 데이터에 대해 지원되는 압축 유형(DEFLATE 또는 SNAPPY) 중 하나를 지정합니다.
    • 내보내기를 클릭하여 테이블을 내보냅니다.

작업의 진행 상황을 확인하려면 내보내기 작업의 작업 기록 탐색 창에서 맨 위쪽을 확인하세요.

기본 UI

  1. BigQuery 웹 UI로 이동합니다.
    BigQuery 웹 UI로 이동

  2. 탐색에서 데이터세트 옆에 있는 확장 아이콘을 클릭하여 콘텐츠를 표시합니다.

  3. 내보낼 데이터가 포함된 테이블 옆에 있는 아래쪽 화살표 아이콘 아래쪽 화살표 아이콘 이미지을 찾아서 클릭합니다.

  4. 테이블 내보내기를 선택하여 Cloud Storage로 내보내기 대화상자를 표시합니다.

  5. Cloud Storage로 내보내기 대화상자에서 다음을 수행합니다.

    • 내보내기 형식에 내보낸 데이터 형식(CSV, JSON(줄바꿈으로 구분) 또는 Avro)을 선택합니다.
    • 압축에 기본값인 None을 사용하거나 GZIP을 선택합니다. Avro 형식을 GZIP 압축과 함께 사용할 수 없습니다. Avro 데이터를 압축하려면 bq 명령줄 도구 또는 API를 사용하고 Avro 데이터에 대해 지원되는 압축 유형(DEFLATE 또는 SNAPPY) 중 하나를 지정합니다.
    • Cloud Storage URI 텍스트 상자에 유효한 URI를 gs://[BUCKET_NAME]/[FILENAME.CSV] 형식으로 입력합니다. 여기서 [BUCKET_NAME]은 Cloud Storage 버킷 이름이고 [FILENAME]은 대상 파일의 이름입니다. BigQuery 데이터세트와 Cloud Storage 버킷은 같은 위치에 있어야 합니다.
    • 확인을 클릭하여 테이블을 내보냅니다.

작업이 실행 중일 때는 탐색의 테이블 이름 옆에 (추출 중)이 나타납니다. 작업의 진행 상태를 확인하려면 추출 작업의 작업 기록 탐색 창에서 맨 위쪽을 확인하세요.

명령줄


bq extract 명령어를 사용합니다.

  • bq --location=[LOCATION] extract --destination_format [FORMAT] --compression [COMPRESSION_TYPE] --field_delimiter [DELIMITER] --print_header [BOOLEAN] [PROJECT_ID]:[DATASET].[TABLE] gs://[BUCKET]/[FILENAME]

각 항목의 의미는 다음과 같습니다.

  • [LOCATION]은 사용자 위치의 이름입니다. --location 플래그는 선택사항입니다. 예를 들어, 도쿄 지역에서 BigQuery를 사용하는 경우에는 플래그 값을 asia-northeast1로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [FORMAT]은 내보낸 데이터 형식(CSV, NEWLINE_DELIMITED_JSON 또는 AVRO)입니다.
  • [COMPRESSION_TYPE]은 데이터 형식에 지원되는 압축 유형입니다. CSVNEWLINE_DELIMITED_JSONGZIP을 지원합니다. AVRODEFLATESNAPPY를 지원합니다.
  • [DELIMITER]는 CSV 내보내기의 열 사이의 경계를 나타내는 문자입니다. \ttab은 탭에 허용되는 이름입니다.
  • [BOOLEAN]true 또는 false입니다. true로 설정하면 헤더 행은 데이터 형식이 헤더를 지원하는 경우 내보낸 데이터에 인쇄됩니다. 기본값은 true입니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 소스 데이터세트의 이름입니다.
  • [TABLE]은 내보내는 테이블입니다.
  • [BUCKET]은 데이터를 내보내는 Cloud Storage 버킷 이름입니다. BigQuery 데이터세트와 Cloud Storage 버킷은 같은 위치에 있어야 합니다.
  • [FILENAME]은 내보낸 데이터 파일 이름입니다. 와일드 카드를 사용하여 파일 여러 개로 내보낼 수 있습니다.

예:

예를 들어, 다음 명령어는 mydataset.mytable을 이름이 myfile.csv라고 하는 gzip 압축 파일로 내보냅니다. myfile.csvexample-bucket이라 하는 Cloud Storage 버킷에 저장됩니다.

  • bq --location=US extract --compression GZIP 'mydataset.mytable' gs://example-bucket/myfile.csv

기본 대상 형식은 CSV입니다. JSON 또는 Avro로 내보내려면 destination_format 플래그를 사용하고 형식을 NEWLINE_DELIMITED_JSON 또는 AVRO로 설정합니다. 예를 들면 다음과 같습니다.

  • bq --location=US extract --destination_format NEWLINE_DELIMITED_JSON 'mydataset.mytable' gs://example-bucket/myfile.json

다음 명령어는 mydataset.mytable을 Snappy를 사용하여 압축된 Avro 파일로 내보냅니다. 파일 이름은 myfile.avro입니다. myfile.avroexample-bucket라는 Cloud Storage 버킷으로 내보내집니다.

  • bq --location=US extract --destination_format AVRO --compression SNAPPY 'mydataset.mytable' gs://example-bucket/myfile.avro

API


데이터를 내보내려면 작업을 만들고 configuration.extract 객체를 채웁니다.

작업 리소스jobReference 섹션에 있는 location 속성에 사용자의 위치를 지정합니다.

  1. BigQuery 소스 데이터와 Cloud Storage 대상을 가리키는 추출 작업을 만듭니다.

  2. 프로젝트 ID, 데이터세트 ID, 테이블 ID로 구성된 sourceTable 구성 객체를 사용하여 소스 테이블을 지정합니다.

  3. 대상 URI는 gs://[BUCKET_NAME]/[FILENAME.CSV] 형식으로 정규화되어야 합니다. 각 URI에 와일드 카드 문자 '*' 하나가 포함될 수 있으며 이 문자는 버킷 이름 다음에 있어야 합니다.

  4. configuration.extract.destinationFormat 속성을 설정하여 데이터 형식을 지정합니다. 예를 들어, JSON 파일을 내보내려면 이 속성을 NEWLINE_DELIMITED_JSON 값으로 설정합니다.

  5. 작업 상태를 확인하려면 초기 요청이 반환한 작업 ID를 사용하여 jobs.get([JOB_ID])을 호출합니다.

    • status.state = DONE이면 작업이 성공적으로 완료된 것입니다.
    • status.errorResult 속성이 있으면 요청이 실패한 것이며, 해당 객체에 문제의 원인을 설명하는 정보가 포함됩니다.
    • status.errorResult가 없으면 작업이 성공적으로 완료되었지만 치명적이지 않은 오류가 존재할 수 있습니다. 치명적이지 않은 오류는 반환된 작업 객체의 status.errors 속성에 나열됩니다.

API 참고:

  • 권장사항은 jobs.insert()를 호출하여 작업을 만들 때 고유한 ID를 생성하여 jobReference.jobId로 전달하는 것입니다. 클라이언트가 알려진 작업 ID로 폴링하거나 재시도할 수 있으므로, 이 방법은 네트워크 장애 시에 더 안정적입니다.

  • 특정한 작업 ID에 대한 jobs.insert() 호출은 멱등적입니다. 즉, 같은 작업 ID로 원하는 횟수만큼 다시 시도할 수 있으며 최대 한 번만 성공합니다.

C#

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 BigQuery C# API 참조 문서를 참조하세요.

using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryExtractTable
{
    public void ExtractTable(
        string projectId = "your-project-id",
        string bucketName = "your-bucket-name")
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Define a destination URI. Use a single wildcard URI if you think
        // your exported data will be larger than the 1 GB maximum value.
        string destinationUri = $"gs://{bucketName}/shakespeare-*.csv";
        BigQueryJob job = client.CreateExtractJob(
            projectId: "bigquery-public-data",
            datasetId: "samples",
            tableId: "shakespeare",
            destinationUri: destinationUri
        );
        job.PollUntilCompleted();  // Waits for the job to complete.
        Console.Write($"Exported table to {destinationUri}.");
    }
}

Go

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 참조하세요.

srcProject := "bigquery-public-data"
srcDataset := "samples"
srcTable := "shakespeare"

// For example, gcsUri = "gs://mybucket/shakespeare.csv"
gcsRef := bigquery.NewGCSReference(gcsURI)
gcsRef.FieldDelimiter = ","

extractor := client.DatasetInProject(srcProject, srcDataset).Table(srcTable).ExtractorTo(gcsRef)
extractor.DisableHeader = true
// You can choose to run the job in a specific location for more complex data locality scenarios.
// Ex: In this example, source dataset and GCS bucket are in the US.
extractor.Location = "US"

job, err := extractor.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}
if err := status.Err(); err != nil {
	return err
}

자바

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 API 참조 문서를 확인하세요.

Job job = table.extract(format, gcsUrl);
// Wait for the job to complete
try {
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully
  } else {
    // Handle error case
  }
} catch (InterruptedException e) {
  // Handle interrupted wait
}

Node.js

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참조 문서를 참조하세요.

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

async function extractTableToGCS() {
  // Exports my_dataset:my_table to gcs://my-bucket/my-file as raw CSV.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";
  // const bucketName = "my-bucket";
  // const filename = "file.csv";

  // Instantiate clients
  const bigqueryClient = new BigQuery();
  const storageClient = new Storage();

  // Location must match that of the source table.
  const options = {
    location: 'US',
  };

  // Export data from the table into a Google Cloud Storage file
  const [job] = await bigqueryClient
    .dataset(datasetId)
    .table(tableId)
    .extract(storageClient.bucket(bucketName).file(filename), options);
  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}
extractTableToGCS();

PHP

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 BigQuery PHP API 참조 문서를 참조하세요.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';
// $tableId    = 'The BigQuery table ID';
// $bucketName = 'The Cloud Storage bucket Name';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$destinationUri = "gs://{$bucketName}/{$tableId}.json";
// Define the format to use. If the format is not specified, 'CSV' will be used.
$format = 'NEWLINE_DELIMITED_JSON';
// Create the extract job
$extractConfig = $table->extract($destinationUri)->destinationFormat($format);
// Run the job
$job = $table->runJob($extractConfig);  // Waits for the job to complete
printf('Exported %s to %s' . PHP_EOL, $table->id(), $destinationUri);

Python

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

# from google.cloud import bigquery
# client = bigquery.Client()
# bucket_name = 'my-bucket'
project = "bigquery-public-data"
dataset_id = "samples"
table_id = "shakespeare"

destination_uri = "gs://{}/{}".format(bucket_name, "shakespeare.csv")
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    # Location must match that of the source table.
    location="US",
)  # API request
extract_job.result()  # Waits for job to complete.

print(
    "Exported {}:{}.{} to {}".format(project, dataset_id, table_id, destination_uri)
)

Ruby

이 샘플을 시도해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 BigQuery Ruby API 참조 문서를 참조하세요.

require "google/cloud/bigquery"

def extract_table(
    bucket_name = "my-bucket",
    dataset_id  = "my_dataset_id",
    table_id    = "my_table_id"
  )
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table    table_id

  # Define a destination URI. Use a single wildcard URI if you think
  # your exported data will be larger than the 1 GB maximum value.
  destination_uri = "gs://#{bucket_name}/output-*.csv"

  extract_job = table.extract_job(destination_uri) do |config|
    # Location must match that of the source table.
    config.location = "US"
  end
  extract_job.wait_until_done!  # Waits for the job to complete

  puts "Exported #{table.id} to #{destination_uri}"
end

Avro 내보내기 세부정보

BigQuery는 Avro 형식의 데이터를 다음과 같은 방식으로 표현합니다.

  • 결과 내보내기 파일은 Avro 컨테이너 파일입니다.
  • 각 BigQuery 행은 Avro 레코드로 표시됩니다. 중첩된 데이터는 중첩된 레코드 객체로 표현됩니다.
  • REQUIRED 필드는 해당 Avro 유형으로 표현됩니다. 예를 들어, BigQuery INTEGER 유형은 Avro LONG 유형에 매핑됩니다.
  • NULLABLE 필드는 해당 유형과 'null'의 Avro union으로 표현됩니다.
  • REPEATED 필드는 Avro 배열로 표현됩니다.
  • TIMESTAMP 데이터 유형은 Avro LONG 유형으로 표시됩니다.

Avro 형식은 GZIP 압축과 함께 사용할 수 없습니다. Avro 데이터를 압축하려면 bq 명령줄 도구 또는 API를 사용하고 Avro 데이터에 대해 지원되는 압축 유형(DEFLATE 또는 SNAPPY) 중 하나를 지정하세요.

데이터를 하나 이상의 파일로 내보내기

destinationUris 속성은 BigQuery가 파일을 내보내는 위치와 파일 이름을 나타냅니다.

BigQuery는 각 URI에서 와일드 카드 연산자 하나(*)를 지원합니다. 와일드 카드는 버킷 이름의 일부인 경우를 제외하고 URI의 아무 곳에나 나타날 수 있습니다. 와일드 카드 연산자를 사용하면 BigQuery에 제공된 패턴을 기반으로 분할된 파일을 여러 개 만들도록 지시합니다. 와일드 카드 연산자는 숫자(0에서 시작)로 대체되고 왼쪽으로 12자리까지 채워집니다. 예를 들어, 파일 이름 끝에 와일드 카드가 있는 URI는 첫 번째 파일에 000000000000을 추가하고 두 번째 파일에 000000000001을 추가하는 식으로 파일을 만듭니다.

다음 테이블에서는 destinationUris 속성에 사용 가능한 몇 가지 옵션을 설명합니다.

'destinationUris' 옵션
단일 URI

1GB 이하인 테이블 데이터를 내보내는 경우 단일 URI를 사용합니다. 이 옵션은 내보낸 데이터가 일반적으로 최대값인 1GB보다 작기 때문에 가장 일반적인 사용 사례입니다.

속성 정의:

['gs://[YOUR_BUCKET]/file-name.json']

생성:


gs://my-bucket/file-name.json
단일 와일드 카드 URI

내보내는 데이터가 최대값 1GB보다 크다고 생각되면 단일 와일드 카드 URI를 사용합니다. BigQuery는 제공된 패턴을 기반으로 데이터를 여러 파일로 분할합니다. 내보낸 파일 크기는 다양합니다.

파일 이름이 아닌 URI 구성요소에 와일드 카드를 사용하는 경우, 데이터를 내보내기 전에 경로 구성 요소가 존재하지 않는지 확인하세요.

속성 정의:

['gs://[YOUR_BUCKET]/file-name-*.json']

생성:


gs://my-bucket/file-name-000000000000.json
gs://my-bucket/file-name-000000000001.json
gs://my-bucket/file-name-000000000002.json
...

속성 정의:

['gs://[YOUR_BUCKET]/path-component-*/file-name.json']

생성:


gs://my-bucket/path-component-000000000000/file-name.json
gs://my-bucket/path-component-000000000001/file-name.json
gs://my-bucket/path-component-000000000002/file-name.json
...
여러 와일드 카드 URI

내보내기 출력을 여러 파티션으로 나누려면 여러 개의 와일드 카드 URI를 사용합니다. Cloud Dataproc과 같은 서비스를 사용하여 병렬 처리 작업을 실행하는 경우 이 옵션을 사용합니다. 작업을 처리할 수 있는 작업자의 수를 결정하고 작업자당 하나의 URI를 만듭니다. BigQuery는 각 URI 위치를 파티션으로 취급하고, 병렬 처리를 사용하여 데이터를 각 위치의 여러 파일로 분할합니다. 각 URI마다 하나의 와일드 카드 연산자가 있고 각 URI가 고유하며 URI의 수가 할당량 정책을 초과하지 않는다고 가정할 경우, 파일 이름에 원하는 패턴을 사용할 수 있습니다.

두 개 이상의 와일드 카드 URI를 전달하면 BigQuery에서 각 파티션의 끝에 세트의 '최종' 파일을 나타내는 특수한 파일을 만듭니다. 이 파일 이름은 BigQuery가 만든 분할 개수를 나타냅니다.

예를 들어, 와일드 카드 URI가 gs://[YOUR_BUCKET]/file-name- <worker number>-*.json이고 BigQuery가 분할된 파일 80개를 만드는 경우 제로 레코드 파일 이름은 gs://my-bucket/file- name-<worker number>-000000000080.json입니다. 이 파일 이름을 사용하여 BigQuery가 이름이 000000000000-000000000079인 분할된 파일 80개를 만들었는지 확인할 수 있습니다.

데이터 형식에 따라 제로 레코드 파일에 0바이트가 넘게 포함될 수 있습니다. 예를 들면 데이터를 열 헤더가 있는 CSV 형식으로 내보내는 경우가 있습니다.

문자열 패턴:

gs://[YOUR_BUCKET]/file-name-<worker number>-*.json

속성 정의:


['gs://my-bucket/file-name-1-*.json',
'gs://my-bucket/file-name-2-*.json',
'gs://my-bucket/file-name-3-*.json']

생성:

이 예에서는 BigQuery가 각 파티션에 80개의 분할된 파일을 생성한다고 가정합니다.


gs://my-bucket/file-name-1-000000000000.json
gs://my-bucket/file-name-1-000000000001.json
...
gs://my-bucket/file-name-1-000000000080.json
gs://my-bucket/file-name-2-000000000000.json
gs://my-bucket/file-name-2-000000000001.json
...
gs://my-bucket/file-name-2-000000000080.json
gs://my-bucket/file-name-3-000000000000.json
gs://my-bucket/file-name-3-000000000001.json
...
gs://my-bucket/file-name-3-000000000080.json

할당량 정책

내보내기 작업 할당량에 대한 자세한 내용은 할당량 및 한도 페이지의 내보내기 작업을 참조하세요.

가격

현재 BigQuery에서 데이터를 내보내는 경우에는 요금이 청구되지 않지만 내보내기에는 BigQuery의 할당량 및 한도가 적용됩니다.

BigQuery 가격에 대한 자세한 내용은 가격 책정 페이지를 참조하세요.

데이터를 내보낸 후 Cloud Storage에 데이터를 저장하면 요금이 청구됩니다.

Cloud Storage 가격에 대한 자세한 내용은 Cloud Storage 가격 책정 페이지를 참조하세요.

다음 단계

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

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

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