Cloud Storage에서 ORC 데이터 로드

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

ORC는 Apache Hadoop 생태계에서 널리 사용하는 오픈소스 열 기반 데이터 형식입니다.

Cloud Storage에서 ORC 데이터를 로드할 때는 새 테이블 또는 파티션에 데이터를 로드하거나 기존 테이블 또는 파티션에 추가하거나 덮어쓸 수 있습니다. BigQuery에 로드한 데이터는 Capacitor용 열 형식(BigQuery의 저장소 형식)으로 변환됩니다.

Cloud Storage에서 BigQuery 테이블로 데이터를 로드할 때 테이블을 포함한 데이터세트는 Cloud Storage 버킷과 같은 지역이나 다중 지역 위치에 있어야 합니다.

로컬 파일에서 ORC 데이터를 로드하는 방법에 대한 자세한 내용은 로컬 데이터 소스에서 BigQuery로 데이터 로드를 참조하세요.

ORC 스키마

ORC 파일을 BigQuery로 로드하면 테이블 스키마는 자기 기술 소스 데이터에서 자동으로 검색됩니다. BigQuery가 소스 데이터에서 스키마를 검색하면 알파벳순으로 마지막 파일이 사용됩니다.

예를 들어 Cloud Storage에 다음 ORC 파일이 있다고 가정해 보겠습니다.

gs://mybucket/00/
  a.orc
  z.orc
gs://mybucket/01/
  b.orc

이 명령어는 단일 CLI 명령어로 모든 파일을 쉼표로 구분된 목록으로 로드하며, 스키마는 mybucket/01/b.orc에서 추출됩니다.

bq --location=US load --source_format=ORC [DATASET].[TABLE] "gs://mybucket/00/*.orc","gs://mybucket/01/*.orc"

BigQuery가 스키마를 감지하면 일부 ORC 데이터 유형은 BigQuery SQL 구문과 호환되도록 BigQuery 데이터 유형으로 변환됩니다. 감지한 스키마에 있는 모든 필드는 NULLABLE입니다. 자세한 내용은 ORC 변환을 참조하세요.

스키마가 서로 다른 ORC 파일을 로드할 때 여러 스키마에 지정된 동일 필드(이름과 중첩 수준이 같음)는 각 스키마 정의에서 변환된 같은 BigQuery 데이터 유형으로 매핑되어야 합니다.

ORC 압축

압축된 ORC 파일은 지원되지 않지만 압축된 파일 바닥글과 스트라이프는 지원됩니다. 지원되는 압축 형식은 Zlib, Snappy, LZO, LZ4입니다.

ORC 데이터를 새 테이블에 로드

Cloud Storage의 ORC 데이터를 새 BigQuery 테이블로 로드하거나 기존 테이블에 데이터를 추가하려면 다음 안내를 따르세요.

기본 UI

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

  2. 탐색 패널에서 데이터세트에 마우스를 올려놓고 아래쪽 화살표 아이콘(아래쪽 화살표 아이콘 이미지)을 클릭한 후 새 테이블 만들기를 클릭합니다. 데이터를 로드하는 프로세스는 빈 테이블을 생성하는 프로세스와 동일합니다.

  3. 테이블 만들기 페이지의 소스 데이터 섹션에서 다음을 수행합니다.

    • 위치Cloud Storage를 선택하고 소스 필드에 Cloud Storage URI를 입력합니다. BigQuery 웹 UI에서는 URI를 여러 개 포함할 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 생성 중인 테이블을 포함하는 데이터세트와 같은 위치에 있어야 합니다.
    • 파일 형식에는 ORC를 선택합니다.
  4. 테이블 만들기 페이지의 대상 테이블 섹션에서 다음을 수행합니다.

    • 테이블 이름으로 적절한 데이터세트를 선택하고 테이블 이름 필드에 BigQuery에서 만들 테이블 이름을 입력합니다.
    • 테이블 유형기본 테이블로 설정되어 있는지 확인합니다.
  5. 스키마 섹션은 별도의 설정이 필요하지 않습니다. 스키마는 ORC 파일에서 자체 기술됩니다.

  6. 테이블 만들기를 클릭합니다.

명령줄

bq load 명령어를 사용하여 ORC를 source_format으로 지정하고 Cloud Storage URI를 포함합니다. 단일 URI, 쉼표로 구분된 URI 목록 또는 와일드 카드를 포함하는 URI를 포함해도 됩니다.

--location 플래그를 지정하고 값을 사용자 위치로 설정합니다.

bq --location=[LOCATION] load --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]

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

  • [LOCATION]은 사용자의 위치입니다. 데이터가 US 또는 EU 다중 지역 위치에 있는 경우 --location 플래그는 선택사항입니다. 예를 들어 도쿄 지역에서 BigQuery를 사용하는 경우 플래그 값을 asia-northeast1로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [FORMAT]ORC입니다.
  • [DATASET]는 기존 데이터세트입니다.
  • [TABLE]은 데이터를 로드하는 테이블의 이름입니다.
  • [PATH_TO_SOURCE]는 정규화된 Cloud Storage URI 또는 쉼표로 구분된 URI 목록입니다. 와일드 카드도 지원됩니다.

예:

  • 다음 명령어는 gs://mybucket/mydata.orc에서 mydataset에 있는 mytable이라는 이름의 테이블로 데이터를 로드합니다. mybucketmydatasetUS 다중 지역 위치에서 생성되었습니다.

    bq --location=US load --source_format=ORC mydataset.mytable gs://mybucket/mydata.orc
    
  • 다음 명령어는 gs://mybucket/의 여러 파일에서 mydataset에 있는 mytable이라는 이름의 테이블로 데이터를 로드합니다. Cloud Storage URI는 와일드 카드를 사용합니다. mybucketmydatasetUS 다중 지역 위치에서 생성되었습니다.

    bq --location=US load --source_format=ORC mydataset.mytable gs://mybucket/mydata*.orc
    
  • 다음 명령어는 gs://mybucket/에 있는 여러 파일에서 mydataset에 있는 mytable이라는 테이블로 데이터를 로드합니다. 명령어에는 와일드 카드와 함께 쉼표로 구분된 Cloud Storage URI 목록이 포함됩니다. mybucketmydatasetasia-northeast1 지역에서 생성되었습니다.

    bq --location=asia-northeast1 load --autodetect --source_format=ORC mydataset.mytable "gs://mybucket/00/*.orc","gs://mybucket/01/*.orc"
    

API

API를 사용하여 ORC 데이터를 로드하려면 다음 속성을 설정합니다.

  1. Cloud Storage의 소스 데이터를 가리키는 로드 작업을 만듭니다.

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

  3. 소스 URI는 gs://[BUCKET]/[OBJECT] 형식으로 정규화되어야 합니다. 각 URI는 '*' 와일드 카드 문자 하나를 포함할 수 있습니다.

  4. configuration.load.sourceFormat 속성을 ORC로 설정하여 ORC 데이터 형식을 지정합니다.

  5. 작업 상태를 확인하려면 jobs.get([JOB_ID]*)을 호출합니다. 여기서 [JOB_ID]는 초기 요청에서 반환된 작업의 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.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsOrc
{
    public void LoadTableGcsOrc(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
        var dataset = client.GetDataset(datasetId);
        TableReference destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            SourceFormat = FileFormat.Orc
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI,
            destination: destinationTableRef,
            // Pass null as the schema because the schema is inferred when
            // loading Orc data
            schema: null,
            options: jobOptions
        );
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.orc")
gcsRef.SourceFormat = bigquery.ORC
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)

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

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

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');

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const datasetId = "my_dataset";
// const tableId = "my_table"

/**
 * This sample loads the ORC file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.orc
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.orc';

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

// Configure the load job. For full list of options, see:
// https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
const metadata = {
  sourceFormat: 'ORC',
  location: 'US',
};

// Load data from a Google Cloud Storage file into the table
const [job] = await bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(storage.bucket(bucketName).file(filename), metadata);

// 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;
}

PHP

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table('us_states');

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc';
$loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('ORC');
$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

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

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.ORC
uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc'

load_job = client.load_table_from_uri(
    uri,
    dataset_ref.table('us_states'),
    job_config=job_config)  # API request
print('Starting job {}'.format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print('Job finished.')

destination_table = client.get_table(dataset_ref.table('us_states'))
print('Loaded {} rows.'.format(destination_table.num_rows))

Ruby

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

require "google/cloud/bigquery"

def load_table_gcs_orc dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.orc"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, format: "orc"
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

ORC 데이터로 테이블 덮어쓰기

소스 파일에서 또는 쿼리 결과를 추가하여 테이블에 추가 데이터를 로드할 수 있습니다.

콘솔 또는 기본 BigQuery 웹 UI에서 쓰기 환경설정 옵션을 사용하여 소스 파일 또는 쿼리 결과에서 데이터를 로드할 때 수행할 작업을 지정합니다.

추가 데이터를 테이블에 로드할 때 다음 옵션을 사용할 수 있습니다.

콘솔 옵션 기본 UI 옵션 CLI 플래그 BigQuery API 속성 설명
비어 있으면 쓰기 비어 있으면 쓰기 없음 WRITE_EMPTY 테이블이 비어 있는 경우에만 데이터를 씁니다.
테이블에 추가 테이블에 추가 --noreplace 또는 --replace=false. --[no]replace를 지정하지 않으면 기본값은 추가입니다. WRITE_APPEND (기본값) 데이터를 테이블 끝에 추가합니다.
테이블 덮어쓰기 테이블 덮어쓰기 --replace 또는 --replace=true WRITE_TRUNCATE 새 데이터를 쓰기 전에 테이블의 기존 데이터를 모두 지웁니다.

기본적으로 쓰기 처리가 변경되지 않으면 로드 작업이 테이블에 데이터를 추가합니다. 로드 작업의 데이터로 데이터를 대체하려면 BigQuery 테이블의 데이터를 덮어쓰도록 선택할 수 있습니다.

기본 UI

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

  2. 탐색 패널에서 데이터세트에 마우스를 올려놓고 아래쪽 화살표 아이콘(아래쪽 화살표 아이콘 이미지)을 클릭한 후 새 테이블 만들기를 클릭합니다. 데이터를 로드하는 프로세스는 빈 테이블을 생성하는 프로세스와 동일합니다.

  3. 테이블 만들기 페이지의 소스 데이터 섹션에서 다음을 수행합니다.

    • 위치Cloud Storage를 선택하고 소스 필드에 Cloud Storage URI를 입력합니다. UI에서는 URI를 여러 개 포함할 수 없지만 와일드 카드는 지원됩니다. Cloud Storage 버킷은 추가하거나 덮어쓰는 테이블을 포함하는 데이터세트와 같은 위치에 있어야 합니다.
    • 파일 형식에는 ORC를 선택합니다.
  4. 테이블 만들기 페이지의 대상 테이블 섹션에서 다음을 수행합니다.

    • 테이블 이름으로 적절한 데이터세트를 선택하고 테이블 이름 필드에 추가하거나 덮어쓰는 테이블의 이름을 입력합니다.
    • 테이블 유형기본 테이블로 설정되어 있는지 확인합니다.
  5. 스키마 섹션은 별도의 설정이 필요하지 않습니다. 스키마 정보는 ORC 파일에서 자체 기술됩니다.

  6. 옵션 섹션의 쓰기 환경설정에서 비어 있으면 쓰기, 테이블에 추가 또는 테이블 덮어쓰기를 선택합니다.

    필드 추가를 이용해 스키마 추가

  7. 테이블 만들기를 클릭합니다.

명령줄

테이블을 덮어쓰려면 bq load 명령어를 --replace 플래그와 함께 입력합니다. --location 플래그를 지정하고 값을 사용자 위치로 설정합니다. --noreplace 플래그를 사용하여 데이터를 테이블에 추가합니다. 플래그를 지정하지 않으면 데이터 추가가 기본값입니다.

bq --location=[LOCATION] load --[no]replace [DATASET].[TABLE] [PATH_TO_SOURCE]

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

  • [LOCATION]은 사용자의 위치입니다. 데이터가 US 또는 EU 다중 지역 위치에 있는 경우 --location 플래그는 선택사항입니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [DATASET]는 기존 데이터세트입니다.
  • [TABLE]은 데이터를 로드하는 테이블의 이름입니다.
  • [PATH_TO_SOURCE]는 정규화된 Cloud Storage URI 또는 쉼표로 구분된 URI 목록입니다. 와일드 카드도 지원됩니다.

예:

  • 다음 명령어는 gs://mybucket/mydata.orc에서 데이터를 로드하여 mydataset에 있는 mytable이라는 이름의 테이블을 덮어씁니다. mybucketmydatasetUS 다중 지역 위치에서 생성되었습니다.

    bq --location=US load --replace --source_format=ORC mydataset.mytable gs://mybucket/mydata.orc
    
  • 다음 명령어는 gs://mybucket/mydata.orc에서 데이터를 로드하여 mydataset에 있는 mytable이라는 이름의 테이블에 데이터를 추가합니다. mybucketmydatasetasia-northeast1 지역에서 생성되었습니다.

    bq --location=asia-northeast1 load --noreplace --source_format=ORC mydataset.mytable gs://mybucket/mydata.orc
    

API

API를 사용하여 CSV 데이터를 로드하려면 다음 속성을 설정하세요.

  1. Cloud Storage의 소스 데이터를 가리키는 로드 작업을 만듭니다.

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

  3. 소스 URI는 gs://[BUCKET]/[OBJECT] 형식으로 정규화되어야 합니다. 여러 URI를 쉼표로 구분된 목록으로 포함할 수 있습니다. Cloud Storage에서 CSV 데이터 로드 시 와일드 카드도 지원됩니다.

  4. configuration.load.sourceFormat 속성을 ORC로 설정하여 데이터 형식을 지정합니다.

  5. configuration.load.writeDisposition 속성을 WRITE_TRUNCATE, WRITE_APPEND 또는 WRITE_EMPTY로 설정하여 쓰기 환경설정을 지정합니다. 로드 작업에서는 기본 모드가 WRITE_APPEND입니다.

C#

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

using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsOrcTruncate
{
    public void LoadTableGcsOrcTruncate(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
        var dataset = client.GetDataset(datasetId);
        TableReference destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            SourceFormat = FileFormat.Orc,
            WriteDisposition = WriteDisposition.WriteTruncate
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI,
            destination: destinationTableRef,
            // Pass null as the schema because the schema is inferred when
            // loading Orc data
            schema: null, options: jobOptions);
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.orc")
gcsRef.SourceFormat = bigquery.ORC
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
// Default for import jobs is to append data to a table.  WriteTruncate
// specifies that existing data should instead be replaced/overwritten.
loader.WriteDisposition = bigquery.WriteTruncate

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

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

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');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const datasetId = "my_dataset";
// const tableId = "my_table";

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.orc';

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

// Configure the load job. For full list of options, see:
// https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
const metadata = {
  sourceFormat: 'ORC',
  // Set the write disposition to overwrite existing table data.
  writeDisposition: 'WRITE_TRUNCATE',
  location: 'US',
};

// Load data from a Google Cloud Storage file into the table
const [job] = await bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(storage.bucket(bucketName).file(filename), metadata);
// 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;
}

PHP

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableID = 'The BigQuery table ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$table = $bigQuery->dataset($datasetId)->table($tableId);

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc';
$loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('ORC')->writeDisposition('WRITE_TRUNCATE');
$job = $table->runJob($loadConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});

// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

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

기존 테이블의 행을 바꾸려면 LoadJobConfig.write_disposition 속성WRITE_TRUNCATE로 설정합니다.

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('existing_table')

previous_rows = client.get_table(table_ref).num_rows
assert previous_rows > 0

job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.source_format = bigquery.SourceFormat.ORC
uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.orc'
load_job = client.load_table_from_uri(
    uri,
    table_ref,
    job_config=job_config)  # API request
print('Starting job {}'.format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print('Job finished.')

destination_table = client.get_table(table_ref)
print('Loaded {} rows.'.format(destination_table.num_rows))

Ruby

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

require "google/cloud/bigquery"

def load_table_gcs_orc_truncate(
    dataset_id = "your_dataset_id",
    table_id   = "your_table_id"
  )
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.orc"

  load_job = dataset.load_job table_id,
                              gcs_uri,
                              format: "orc",
                              write:  "truncate"
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

ORC 변환

BigQuery는 ORC 데이터 유형을 다음 BigQuery 데이터 유형으로 변환합니다.

기본 유형

ORC 데이터 유형 BigQuery 데이터 유형 참고
boolean BOOLEAN
byte INTEGER
short INTEGER
int INTEGER
long INTEGER
float FLOAT
double FLOAT
string STRING UTF-8 전용
varchar STRING UTF-8 전용
char STRING UTF-8 전용
binary BYTES
date DATE
timestamp TIMESTAMP ORC는 나노초 정밀도를 지원하지만 BigQuery는 데이터를 읽을 때 1마이크로초 미만의 값을 마이크로초로 변환합니다.
decimal NUMERIC 또는 STRING NUMERIC 유형은 38자리의 정밀도와 소수점 9자리의 비율을 사용하는 정확한 숫자 값입니다. 자세한 내용은 NUMERIC 유형을 참조하세요. ORC 스키마의 decimal 유형이 9자리 이하이고 정밀도-비율이 29 이하라면 NUMERIC으로 변환됩니다. 그렇지 않으면 STRING으로 변환됩니다. decimal 유형이 문자열로 변환되면 경고 메시지가 반환됩니다.

복합 유형

ORC 데이터 유형 BigQuery 데이터 유형 참고
struct RECORD
  • 모든 필드는 NULLABLE입니다.
  • 필드의 순서는 무시됩니다.
  • 필드 이름은 유효한 열 이름이어야 합니다.
map<K,V> RECORD ORC map<K,V> 필드는 K와 V의 두 가지 필드를 포함하는 반복 RECORD 변환됩니다. K는 동일한 데이터 유형의 키이고 V는 동일한 데이터 유형의 값입니다. 두 필드 모두 NULLABLE입니다.
list 반복 필드 중첩 목록과 map 목록은 지원되지 않습니다.
union RECORD
  • union에 변형이 하나뿐이라면 NULLABLE 필드로 변환됩니다.
  • 그렇지 않으면 union은 NULLABLE 필드의 목록이 있는 RECORD로 변환됩니다. NULLABLE 필드에는 field_0, field_1 등과 같은 서픽스가 있습니다. 데이터를 읽을 때는 이러한 필드 중 하나에만 값이 할당됩니다.

열 이름

열 이름은 문자(a-z, A-Z), 숫자(0-9) 또는 밑줄(_)만 포함해야 하며 문자 또는 밑줄로 시작해야 합니다. 최대 열 이름 길이는 128자입니다. 열 이름은 다음과 같은 프리픽스를 사용할 수 없습니다.

  • _TABLE_
  • _FILE_
  • _PARTITION

중복 열 이름은 대소문자가 다른 경우라도 허용되지 않습니다. 예를 들어, Column1 이름의 열과 column1 이름의 열은 동일한 열로 간주됩니다.

NULL

현재 BigQuery는 list 복합 유형에 대한 NULL 값을 무시합니다.

ORC 데이터 유형에 대한 자세한 내용은 Apache ORC™ 사양 v1을 참조하세요.

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

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

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