테이블 스키마 수정
이 문서에서는 기존 BigQuery 테이블의 스키마 정의를 수정하는 방법을 설명합니다.
이 문서에 설명된 대부분의 스키마 수정 작업은 SQL 데이터 정의 언어(DDL) 문을 사용하여 수행할 수 있습니다. 이러한 문에는 요금이 발생하지 않습니다.
테이블 데이터를 Cloud Storage로 내보낸 다음 수정된 스키마 정의가 있는 새 테이블에 데이터를 로드하여 이 페이지에 설명된 모든 방법으로 테이블 스키마를 수정할 수 있습니다. BigQuery 로드 및 내보내기 작업은 무료이지만 내보낸 데이터를 Cloud Storage에 저장하는 데 비용이 발생합니다. 다음 섹션에서는 다양한 유형의 스키마 수정 작업을 수행하는 다른 방법을 설명합니다.
열 추가
다음 옵션 중 하나를 사용하여 기존 테이블의 스키마 정의에 열을 추가할 수 있습니다.
- 새로운 빈 열을 추가합니다.
- 로드 또는 쿼리 작업으로 테이블을 덮어씁니다.
- 로드 또는 쿼리 작업으로 테이블에 데이터를 추가합니다.
추가하는 모든 열은 BigQuery의 열 이름 규칙을 준수해야 합니다. 스키마 구성요소를 만드는 자세한 방법은 스키마 지정을 참조하세요.
빈 열 추가
기존 테이블 스키마에 새 열을 추가하는 경우 열은 NULLABLE
또는 REPEATED
여야 합니다. 기존 테이블 스키마에는 REQUIRED
열을 추가할 수 없습니다. API 또는 bq 명령줄 도구의 기존 테이블 스키마에 REQUIRED
열을 추가하면 오류가 발생합니다. 그러나 중첩된 REQUIRED
열을 새 RECORD
필드의 일부로 만들 수 있습니다.
REQUIRED
열은 테이블을 만들면서 데이터를 로드하거나 스키마 정의가 없는 빈 테이블을 만들 때만 추가할 수 있습니다.
테이블의 스키마 정의에 빈 열을 추가하려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.
세부정보 패널에서 스키마 탭을 클릭합니다.
스키마 수정을 클릭합니다. 이 버튼을 보려면 스크롤해야 할 수도 있습니다.
현재 스키마 페이지의 새 필드에서 필드 추가를 클릭합니다.
열 추가가 끝나면 저장을 클릭합니다.
SQL
ALTER TABLE ADD COLUMN
DDL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
bq update
명령어를 실행하고 JSON 스키마 파일을 제공합니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신의 JSON 스키마 파일 경로입니다.
인라인 스키마를 지정할 때 열 설명, 모드, RECORD
(STRUCT
) 유형을 지정할 수 없습니다. 모든 열 모드는 기본적으로 NULLABLE
로 설정됩니다. 따라서 RECORD
에 새로운 중첩 열을 추가하는 경우 JSON 스키마 파일을 제공해야 합니다.
인라인 스키마 정의를 사용하여 열을 추가하려면 새 열을 포함하여 전체 스키마 정의를 제공해야 합니다. 인라인 스키마 정의를 사용하여 열 모드를 지정할 수 없기 때문에 업데이트 시 기존 REPEATED
열이 NULLABLE
로 변경되어 BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
오류가 발생합니다.
bq 명령줄 도구를 사용하여 기존 테이블에 열을 추가할 때는 JSON 스키마 파일을 제공하는 것이 좋습니다.
JSON 스키마 파일을 사용하여 테이블의 스키마에 빈 열을 추가하려면 다음과 같이 하세요.
먼저,
--schema
플래그를 지정하여bq show
명령어를 실행하고 기존 테이블 스키마를 파일에 씁니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신에 작성된 스키마 정의 파일입니다.
예를 들어
mydataset.mytable
의 스키마 정의를 파일에 쓰려면 다음 명령어를 입력합니다. 여기서mydataset.mytable
은 기본 프로젝트에 있습니다.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
텍스트 편집기에서 스키마 파일을 엽니다. 스키마가 다음과 같이 나타납니다.
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
스키마 정의의 끝에 새 열을 추가합니다. 배열의 다른 위치에 새 열을 추가하려고 하면
BigQuery error in update operation: Precondition Failed
라는 오류가 반환됩니다.JSON 파일을 사용하는 경우에는 새 열의 설명,
NULLABLE
또는REPEATED
모드,RECORD
유형을 지정할 수 있습니다. 예를 들어 이전 단계의 스키마 정의를 사용할 경우 새 JSON 배열은 다음과 같이 나타납니다. 이 예시에서는column4
라는 새로운NULLABLE
열이 추가되었으며column4
에는 설명이 포함되었습니다.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]
JSON 스키마 파일 작업에 대한 자세한 내용은 JSON 스키마 파일 지정을 참조하세요.
스키마 파일을 업데이트한 후 다음 명령어를 실행하여 테이블의 스키마를 업데이트합니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를
PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq update PROJECT_ID:DATASET.TABLE SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신에 작성된 스키마 정의 파일입니다.
예를 들어 기본 프로젝트에 있는
mydataset.mytable
의 스키마 정의를 업데이트하려면 다음 명령어를 입력합니다. 로컬 머신에 있는 스키마 파일의 경로는/tmp/myschema.json
입니다.bq update mydataset.mytable /tmp/myschema.json
API
tables.patch
메서드를 호출하고 schema
속성을 사용하여 스키마 정의에 빈 열을 추가합니다. tables.update
메서드는 전체 테이블 리소스를 바꾸기 때문에 tables.patch
메서드를 사용하는 것이 좋습니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
새 SchemaField 객체를 Table.schema 사본에 추가한 다음 Table.schema 속성 값을 업데이트된 스키마로 바꿉니다.RECORD
열에 중첩 열 추가
테이블의 스키마에 새 열을 추가할 수 있을 뿐만 아니라 RECORD
에 새 중첩 열을 추가할 수도 있습니다. 새 중첩 열을 추가하는 프로세스는 새 열을 추가하는 프로세스와 유사합니다.
콘솔
기존 RECORD
열에 새 중첩 필드를 추가하는 기능은 Google Cloud 콘솔에서 지원되지 않습니다.
SQL
SQL DDL 문을 사용하여 기존 RECORD
열에 새 중첩 필드를 추가하는 기능은 지원되지 않습니다.
bq
bq update
명령어를 실행하고 기존 RECORD
열의 스키마 정의에 중첩 필드를 추가하는 JSON 스키마 파일을 제공합니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.
bq update PROJECT_ID:DATASET.TABLE SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신의 JSON 스키마 파일 경로입니다.
인라인 스키마를 지정할 때 열 설명, 모드, RECORD
(STRUCT
) 유형을 지정할 수 없습니다. 모든 열 모드는 기본적으로 NULLABLE
로 설정됩니다. 따라서 RECORD
에 새로운 중첩 열을 추가하는 경우 JSON 스키마 파일을 제공해야 합니다.
JSON 스키마 파일을 사용하여 RECORD
에 중첩 열을 추가하려면 다음 안내에 따르세요.
먼저,
--schema
플래그를 지정하여bq show
명령어를 실행하고 기존 테이블 스키마를 파일에 씁니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를PROJECT_ID:DATASET.TABLE
형식으로 데이터 세트 이름에 추가합니다.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신에 작성된 스키마 정의 파일입니다.
예를 들어
mydataset.mytable
의 스키마 정의를 파일에 쓰려면 다음 명령어를 입력합니다. 여기서mydataset.mytable
은 기본 프로젝트에 있습니다.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
텍스트 편집기에서 스키마 파일을 엽니다. 스키마가 다음과 같이 나타납니다. 이 예시에서
column3
은 중첩 반복 열입니다. 중첩 열은nested1
와nested2
입니다.fields
배열에는column3
내에 중첩된 필드가 나열됩니다.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
fields
배열의 끝에 새로운 중첩 열을 추가합니다. 이 예시에서nested3
은 새로운 중첩 열입니다.[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
JSON 스키마 파일 작업에 대한 자세한 내용은 JSON 스키마 파일 지정을 참조하세요.
스키마 파일을 업데이트한 후 다음 명령어를 실행하여 테이블의 스키마를 업데이트합니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를
PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq update PROJECT_ID:DATASET.TABLE SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신의 JSON 스키마 파일 경로입니다.
예를 들어 기본 프로젝트에 있는
mydataset.mytable
의 스키마 정의를 업데이트하려면 다음 명령어를 입력합니다. 로컬 머신에 있는 스키마 파일의 경로는/tmp/myschema.json
입니다.bq update mydataset.mytable /tmp/myschema.json
API
tables.patch
메서드를 호출하고 schema
속성을 사용하여 스키마 정의에 중첩 열을 추가합니다. tables.update
메서드는 전체 테이블 리소스를 바꾸기 때문에 tables.patch
메서드를 사용하는 것이 좋습니다.
데이터를 덮어쓰거나 추가할 때 열 추가
기존 테이블에 데이터를 로드할 때 해당 테이블에 새 열을 추가하고 기존 테이블을 덮어쓸 수 있습니다. 기존 테이블을 덮어쓸 경우 로드하는 데이터의 스키마를 사용하여 기존 테이블의 스키마를 덮어쓰게 됩니다. 로드 작업을 사용하여 테이블을 덮어쓰는 방법은 데이터 형식의 문서를 참조하세요.
로드 추가 작업에서 열 추가
로드 작업에서 데이터를 추가할 때 테이블에 열을 추가할 수 있습니다. 새 스키마는 다음 중 하나로 결정됩니다.
- 자동 감지(CSV 및 JSON 파일의 경우)
- JSON 스키마 파일에 지정된 스키마(CSV 및 JSON 파일의 경우)
- Avro, ORC, Parquet, Datastore 내보내기 파일의 자체 설명적 소스 데이터
JSON 파일의 스키마를 지정할 경우 새 열은 JSON 파일에서 정의해야 합니다. 새 열 정의가 없으면 데이터를 추가할 때 오류가 반환됩니다.
추가 작업 중에 새 열을 추가할 경우 기존 행에 대한 새 열의 값은 NULL
로 설정됩니다.
로드 작업 중에 테이블에 데이터를 추가하면서 새 열을 추가하려면 다음 옵션 중 하나를 사용합니다.
bq
bq load
명령어를 사용하여 데이터를 로드하고 --noreplace
플래그를 지정하여 데이터를 기존 테이블에 추가하도록 합니다.
추가하는 데이터가 CSV 또는 줄바꿈으로 구분된 JSON 형식인 경우에는 스키마 자동 감지를 사용하도록 --autodetect
플래그를 지정하거나 JSON 스키마 파일의 스키마를 제공합니다. 추가된 열은 Avro 또는 Datastore 내보내기 파일에서 자동으로 유추될 수 있습니다.
추가하는 데이터에 새 열이 포함되어 있음을 나타내려면 --schema_update_option
플래그를 ALLOW_FIELD_ADDITION
으로 설정해야 합니다.
추가할 테이블이 기본 프로젝트가 아닌 다른 프로젝트의 데이터 세트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.
(선택사항) --location
플래그를 지정하고 값을 사용자 위치로 설정합니다.
다음과 같이 load
명령어를 입력합니다.
bq --location=LOCATION load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
다음을 바꿉니다.
LOCATION
: 위치의 이름.--location
플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을asia-northeast1
로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.FORMAT
: 스키마 형식입니다.NEWLINE_DELIMITED_JSON
,CSV
,AVRO
,PARQUET
,ORC
또는DATASTORE_BACKUP
입니다.PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 추가할 테이블의 이름입니다.PATH_TO_SOURCE
: 정규화된 Cloud Storage URI, 쉼표로 구분된 URI 목록 또는 로컬 머신에 있는 데이터 파일의 경로입니다.SCHEMA
: 로컬 JSON 스키마 파일의 경로입니다. 스키마 파일은--autodetect
가 지정되지 않은 경우 CSV 및 JSON 파일에만 필요합니다. Avro 및 Datastore 스키마는 소스 데이터에서 추론됩니다.
예를 들면 다음과 같습니다.
로드 작업을 사용하여 로컬 Avro 데이터 파일 /tmp/mydata.avro
를 mydataset.mytable
에 추가하려면 다음 명령어를 입력합니다. 스키마는 Avro 데이터에서 자동으로 유추될 수 있으므로 --autodetect
플래그를 사용하지 않아도 됩니다. 여기서 mydataset
는 기본 프로젝트에 있습니다.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
로드 작업을 사용하여 Cloud Storage에 있는 줄바꿈으로 구분된 JSON 데이터 파일을 mydataset.mytable
에 추가하려면 다음 명령어를 입력합니다. --autodetect
플래그는 새 열을 감지하기 위해 사용됩니다. 여기서 mydataset
는 기본 프로젝트에 있습니다.
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
로드 작업을 사용하여 Cloud Storage에 있는 줄바꿈으로 구분된 JSON 데이터 파일을 mydataset.mytable
에 추가하려면 다음 명령어를 입력합니다. 새 열이 포함된 스키마는 로컬 JSON 스키마 파일 /tmp/myschema.json
에 지정됩니다. 여기서 mydataset
는 기본 프로젝트가 아닌 myotherproject
에 있습니다.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
jobs.insert
메서드를 호출합니다. load
작업을 구성하고 다음 속성을 설정합니다.
sourceUris
속성을 사용하여 Cloud Storage의 데이터를 참조합니다.sourceFormat
속성을 설정하여 데이터 형식을 지정합니다.schema
속성에 스키마를 지정합니다.schemaUpdateOptions
속성을 사용하여 스키마 업데이트 옵션을 지정합니다.writeDisposition
속성을 사용하여 대상 테이블의 쓰기 처리를WRITE_APPEND
로 설정합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
쿼리 추가 작업에서 열 추가
쿼리 결과를 추가할 때 테이블에 열을 추가할 수 있습니다.
쿼리 작업에서 추가 작업을 사용하여 열을 추가할 경우 대상 테이블의 스키마를 업데이트하는 데는 쿼리 결과의 스키마가 사용됩니다. 한 위치에서 테이블을 쿼리하고 다른 위치의 다른 테이블에 결과를 쓸 수는 없습니다.
쿼리 작업 중에 테이블에 데이터를 추가하면서 새 열을 추가하려면 다음 옵션 중 하나를 선택합니다.
bq
bq query
명령어를 사용하여 데이터를 쿼리하고 --destination_table
플래그를 지정하여 데이터를 추가할 테이블을 나타냅니다.
기존 대상 테이블에 쿼리 결과를 추가하도록 지정하려면 --append_table
플래그를 지정합니다.
추가하는 쿼리 결과에 새 열이 포함되어 있음을 나타내려면 --schema_update_option
플래그를 ALLOW_FIELD_ADDITION
으로 설정해야 합니다.
use_legacy_sql=false
플래그를 지정하여 쿼리에 GoogleSQL 구문을 사용합니다.
추가할 테이블이 기본 프로젝트가 아닌 다른 프로젝트의 데이터 세트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다. 쿼리하려는 테이블과 대상 테이블이 같은 위치에 있어야 합니다.
(선택사항) --location
플래그를 지정하고 값을 사용자 위치로 설정합니다.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'QUERY'
다음을 바꿉니다.
LOCATION
: 위치의 이름.--location
플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을asia-northeast1
로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다. 쿼리 결과를 다른 위치의 테이블에 추가할 수는 없습니다.PROJECT_ID
: 프로젝트 ID입니다.dataset
: 추가할 테이블이 포함되어 있는 데이터 세트의 이름입니다.TABLE
: 추가할 테이블의 이름입니다.QUERY
: GoogleSQL 구문의 쿼리입니다.
예를 들면 다음과 같습니다.
기본 프로젝트에 있는 mydataset.mytable
을 쿼리하고 쿼리 결과를 역시 기본 프로젝트에 있는 mydataset.mytable2
에 추가하려면 다음 명령어를 입력합니다.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
기본 프로젝트에 있는 mydataset.mytable
을 쿼리하고 쿼리 결과를 myotherproject
의 mydataset.mytable2
에 추가하려면 다음 명령어를 입력합니다.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
jobs.insert
메서드를 호출합니다. query
작업을 구성하고 다음 속성을 설정합니다.
destinationTable
속성을 사용하여 대상 테이블을 지정합니다.writeDisposition
속성을 사용하여 대상 테이블의 쓰기 처리를WRITE_APPEND
로 설정합니다.schemaUpdateOptions
속성을 사용하여 스키마 업데이트 옵션을 지정합니다.query
속성을 사용하여 GoogleSQL 쿼리를 지정합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
열 이름 변경
테이블의 열 이름을 바꾸려면 ALTER TABLE RENAME COLUMN
DDL 문을 사용합니다. 다음 예시에서는 mytable
에서 old_name
열의 이름을 new_name
으로 바꿉니다.
ALTER TABLE mydataset.mytable RENAME COLUMN old_name TO new_name;
ALTER TABLE RENAME COLUMN
문에 대한 자세한 내용은 DDL 세부정보를 참조하세요.
열 데이터 유형 변경
열의 데이터 유형 변경은 Google Cloud 콘솔, bq 명령줄 도구, BigQuery API에서 지원되지 않습니다. 열의 새 데이터 유형을 지정하는 스키마를 적용하여 테이블을 업데이트하려고 하면 오류가 반환됩니다.
DDL 문으로 열 데이터 유형 변경
GoogleSQL을 사용하여 열의 데이터 유형을 변경할 수 있습니다. 자세한 내용과 지원되는 데이터 유형 변환의 전체 목록은 ALTER COLUMN SET DATA TYPE
DDL 문을 참조하세요.
다음 예시에서는 INT64
유형의 열이 포함된 테이블을 만든 후 유형을 NUMERIC
으로 업데이트합니다.
CREATE TABLE mydataset.mytable(c1 INT64); ALTER TABLE mydataset.mytable ALTER COLUMN c1 SET DATA TYPE NUMERIC;
다음 예시에서는 필드가 두 개 있는 중첩 열이 있는 테이블을 만든 후 열 중 하나의 유형을 INT
에서 NUMERIC
으로 업데이트합니다.
CREATE TABLE mydataset.mytable(s1 STRUCT<a INT64, b STRING>); ALTER TABLE mydataset.mytable ALTER COLUMN s1 SET DATA TYPE STRUCT<a NUMERIC, b STRING>;
열의 데이터 유형 변환
열의 데이터 유형을 변환 가능한 유형으로 변경하려면 SQL 쿼리를 사용하여 테이블 데이터 선택하고 관련 열을 변환하고 테이블을 덮어쓰기합니다. 매우 큰 테이블에는 전체 테이블 스캔이 필요하므로 변환 및 덮어쓰기가 권장되지 않습니다.
다음 예시는 mydataset.mytable
에서 column_two
와 column_three
의 모든 데이터를 선택하고 column_one
을 DATE
에서 STRING
으로 변환하는 SQL 쿼리를 보여줍니다. 쿼리 결과는 기존 테이블을 덮어쓰는 데 사용됩니다. 덮어쓴 테이블에는 column_one
이 STRING
데이터 유형으로 저장됩니다.
CAST
사용 시 BigQuery가 변환을 수행할 수 없으면 쿼리가 실패할 수 있습니다. GoogleSQL의 Cast 변환 규칙에 대한 자세한 내용은 Cast 변환을 참조하세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에 다음 쿼리를 입력하여
mydataset.mytable
의column_two
및column_three
에서 모든 데이터를 선택하고column_one
를DATE
에서STRING
으로 변환합니다. 쿼리에서 별칭을 사용하여column_one
을 같은 이름으로 변환합니다. 여기서mydataset.mytable
은 기본 프로젝트에 있습니다.SELECT column_two, column_three, CAST(column_one AS STRING) AS column_one FROM mydataset.mytable;
더보기를 클릭하고 쿼리 설정을 선택합니다.
대상 섹션에서 다음을 수행합니다.
쿼리 결과의 대상 테이블 설정을 선택합니다.
프로젝트 이름에서 기본 프로젝트로 설정된 값을 그대로 둡니다. 이 프로젝트는
mydataset.mytable
을 포함합니다.데이터 세트에서
mydataset
을 선택합니다.테이블 ID 필드에
mytable
을 입력합니다.대상 테이블 쓰기 환경설정에 테이블 덮어쓰기를 클릭합니다. 이 옵션은 쿼리 결과를 사용하여
mytable
을 덮어씁니다.
원하는 경우 데이터의 위치를 선택합니다.
설정을 업데이트하려면 저장을 클릭합니다.
실행을 클릭합니다.
쿼리 작업이 완료되면
column_one
의 데이터 유형이STRING
이 됩니다.
bq
다음 bq query
명령어를 입력하여 mydataset.mytable
의 column_two
및 column_three
에서 모든 데이터를 선택하고 column_one
을 DATE
에서 STRING
으로 변환합니다. 쿼리에서 별칭을 사용하여 column_one
을 같은 이름으로 변환합니다. 여기서 mydataset.mytable
은 기본 프로젝트에 있습니다.
--destination_table
플래그를 사용하여 mydataset.mytable
에 쿼리 결과가 쓰이고 --replace
플래그를 사용하여 mytable
을 덮어씁니다. GoogleSQL 구문을 사용하려면 use_legacy_sql=false
플래그를 지정합니다.
원하는 경우 --location
플래그를 제공하고 값을 사용자 위치로 설정합니다.
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
column_two,
column_three,
CAST(column_one AS STRING) AS column_one
FROM
mydataset.mytable'
API
mydataset.mytable
의 column_two
및 column_three
에서 모든 데이터를 선택하고 column_one
를 DATE
에서 STRING
으로 변환하려면 jobs.insert
메서드를 호출하고 query
작업을 구성합니다. 원하는 경우 jobReference
섹션의 location
속성에 위치를 지정합니다.
쿼리 작업에 사용되는 SQL 쿼리는 SELECT column_two,
column_three, CAST(column_one AS STRING) AS column_one FROM
mydataset.mytable
입니다. 쿼리에서 별칭을 사용하여 column_one
을 같은 이름으로 변환합니다.
mytable
을 쿼리 결과로 덮어쓰려면 configuration.query.destinationTable
속성에 mydataset.mytable
를 포함하고 configuration.query.writeDisposition
속성에서 WRITE_TRUNCATE
를 지정합니다.
열 모드 변경
열 모드에 대해 지원되는 수정 작업은 모드를 REQUIRED
에서 NULLABLE
로 변경하는 것뿐입니다. 열 모드를 REQUIRED
에서 NULLABLE
로 변경하는 것을 열 완화라고도 합니다. 기존 테이블을 덮어쓰도록 데이터를 로드하거나 기존 테이블에 데이터를 추가할 때도 열을 완화할 수 있습니다. 열 모드를 NULLABLE
에서 REQUIRED
로 변경할 수 없습니다.
기존 테이블에서 열을 NULLABLE
로 만들기
열 모드를 REQUIRED
에서 NULLABLE
로 변경하려면 다음 옵션 중 하나를 선택합니다.
콘솔
BigQuery 페이지로 이동합니다.
탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.
세부정보 패널에서 스키마 탭을 클릭합니다.
스키마 수정을 클릭합니다. 이 버튼을 보려면 스크롤해야 할 수도 있습니다.
현재 스키마 페이지에서 변경하려는 필드를 찾습니다.
해당 필드의 모드 드롭다운 목록에서
NULLABLE
을 선택합니다.설정을 업데이트하려면 저장을 클릭합니다.
SQL
ALTER COLUMN DROP NOT NULL
DDL 문을 사용합니다.
다음 예시에서는 mycolumn
열의 모드를 REQUIRED
에서 NULLABLE
로 변경합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL;
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
bq
먼저,
--schema
플래그를 지정하여bq show
명령어를 실행하고 기존 테이블 스키마를 파일에 씁니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA_FILE
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA_FILE
: 로컬 머신에 작성된 스키마 정의 파일입니다.
예를 들어
mydataset.mytable
의 스키마 정의를 파일에 쓰려면 다음 명령어를 입력합니다. 여기서mydataset.mytable
은 기본 프로젝트에 있습니다.bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
텍스트 편집기에서 스키마 파일을 엽니다. 스키마가 다음과 같이 나타납니다.
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
기존 열의 모드를
REQUIRED
에서NULLABLE
로 변경합니다. 이 예시에서는column1
의 모드가 완화됩니다.[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
JSON 스키마 파일 작업에 대한 자세한 내용은 JSON 스키마 파일 지정을 참조하세요.
스키마 파일을 업데이트한 후 다음 명령어를 실행하여 테이블의 스키마를 업데이트합니다. 업데이트할 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있으면 프로젝트 ID를
PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.bq update PROJECT_ID:DATASET.TABLE SCHEMA
다음을 바꿉니다.
PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 업데이트할 테이블이 포함된 데이터 세트의 이름입니다.TABLE
: 업데이트할 테이블의 이름입니다.SCHEMA
: 로컬 머신의 JSON 스키마 파일 경로입니다.
예를 들어 기본 프로젝트에 있는
mydataset.mytable
의 스키마 정의를 업데이트하려면 다음 명령어를 입력합니다. 로컬 머신에 있는 스키마 파일의 경로는/tmp/myschema.json
입니다.bq update mydataset.mytable /tmp/myschema.json
API
tables.patch
를 호출하고 schema
속성을 사용하여 스키마 정의의 REQUIRED
열을 NULLABLE
로 변경합니다. tables.update
메서드는 전체 테이블 리소스를 바꾸기 때문에 tables.patch
메서드를 사용하는 것이 좋습니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Table.schema 속성을 mode 속성이'NULLABLE'
로 설정된 SchemaField 객체 목록으로 덮어씁니다.
추가 로드 작업으로 열을 NULLABLE
로 만들기
로드 작업에서 테이블에 데이터를 추가하는 경우 열 모드를 완화할 수 있습니다. 파일 유형에 따라 다음 중 하나를 선택합니다.
- CSV 및 JSON 파일에서 데이터를 추가할 때 JSON 스키마 파일을 지정하여 개별 열의 모드를 완화합니다.
- Avro, ORC 또는 Parquet 파일에서 데이터를 추가할 때 스키마에서 열을
NULL
로 완화하고 스키마 추론을 통해 완화된 열을 감지할 수 있도록 합니다.
로드 작업 중에 테이블에 데이터를 추가하면서 열을 REQUIRED
에서 NULLABLE
로 완화하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Google Cloud 콘솔을 사용하여 열 모드를 완화할 수 없습니다.
bq
bq load
명령어를 사용하여 데이터를 로드하고 --noreplace
플래그를 지정하여 데이터를 기존 테이블에 추가하도록 합니다.
추가하는 데이터가 CSV 또는 줄바꿈으로 구분된 JSON 형식인 경우에는 로컬 JSON 스키마 파일에서 완화된 열을 지정하거나, 스키마 감지를 통해 소스 데이터의 완화된 열을 감지하도록 --autodetect
플래그를 사용합니다.
완화된 열은 Avro, ORC, Parquet 파일에서 자동으로 유추될 수 있습니다. Datastore 내보내기 추가에는 열 완화가 적용되지 않습니다. Datastore 내보내기 파일을 로드하여 만든 테이블의 열은 항상 NULLABLE
입니다.
추가하는 데이터에 완화된 열이 포함되어 있음을 나타내려면 --schema_update_option
플래그를 ALLOW_FIELD_RELAXATION
으로 설정해야 합니다.
추가할 테이블이 기본 프로젝트가 아닌 다른 프로젝트의 데이터 세트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.
(선택사항) --location
플래그를 지정하고 값을 사용자 위치로 설정합니다.
다음과 같이 load
명령어를 입력합니다.
bq --location=LOCATION load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
다음을 바꿉니다.
LOCATION
: 위치의 이름.--location
플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을asia-northeast1
로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.FORMAT
:NEWLINE_DELIMITED_JSON
,CSV
,PARQUET
,ORC
, 또는AVRO
입니다.DATASTORE_BACKUP
파일에는 열 완화가 필요하지 않습니다. Datastore 내보내기 파일에서 만든 테이블의 열은 항상NULLABLE
입니다.PROJECT_ID
: 프로젝트 ID입니다.dataset는 테이블이 포함된 데이터 세트의 이름입니다.
TABLE
: 추가할 테이블의 이름입니다.PATH_TO_SOURCE
: 정규화된 Cloud Storage URI, 쉼표로 구분된 URI 목록 또는 로컬 머신에 있는 데이터 파일의 경로입니다.SCHEMA
: 로컬 JSON 스키마 파일의 경로입니다. 이 옵션은 CSV 및 JSON 파일에만 사용됩니다. 완화된 열은 Avro 파일에서 자동으로 유추됩니다.
예를 들면 다음과 같습니다.
로드 작업을 사용하여 로컬 Avro 데이터 파일 /tmp/mydata.avro
를 mydataset.mytable
에 추가하려면 다음 명령어를 입력합니다. 완화된 열은 Avro 데이터에서 자동으로 유추될 수 있으므로 스키마 파일을 지정할 필요가 없습니다. 여기서 mydataset
는 기본 프로젝트에 있습니다.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
다음 명령어를 입력하여 로드 작업을 사용하여 Cloud Storage에 있는 줄바꿈으로 구분된 JSON 파일에서 mydataset.mytable
에 데이터를 추가합니다. 완화된 열이 포함된 스키마는 로컬 JSON 스키마 파일 /tmp/myschema.json
에 있습니다. 여기서 mydataset
는 기본 프로젝트에 있습니다.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
다음 명령어를 입력하여 로드 작업을 사용하여 로컬 머신에 있는 CSV 파일의 데이터를 mydataset.mytable
에 추가합니다. 이 명령어는 스키마 자동 감지를 사용해서 소스 데이터에 있는 완화된 열을 검색합니다. 여기서 mydataset
는 기본 프로젝트가 아닌 myotherproject
에 있습니다.
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
jobs.insert
메서드를 호출합니다. load
작업을 구성하고 다음 속성을 설정합니다.
sourceUris
속성을 사용하여 Cloud Storage의 데이터를 참조합니다.sourceFormat
속성을 설정하여 데이터 형식을 지정합니다.schema
속성에 스키마를 지정합니다.schemaUpdateOptions
속성을 사용하여 스키마 업데이트 옵션을 지정합니다.writeDisposition
속성을 사용하여 대상 테이블의 쓰기 처리를WRITE_APPEND
로 설정합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 BigQuery Node.js API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
추가 작업으로 모든 열을 NULLABLE
로 만들기
쿼리 결과를 추가할 때 테이블의 모든 열을 완화할 수 있습니다. --schema_update_option
플래그를 ALLOW_FIELD_RELAXATION
로 설정하여 대상 테이블의 모든 필수 필드를 완화할 수 있습니다. 쿼리 추가 작업을 사용하여 대상 테이블의 개별 열을 완화할 수는 없습니다. 로드 추가 작업으로 개별 열을 완화하려면 추가 작업으로 열을 NULLABLE
로 만들기를 참조하세요.
대상 테이블에 쿼리 결과를 추가할 때 모든 열을 완화하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Google Cloud 콘솔을 사용하여 열 모드를 완화할 수 없습니다.
bq
bq query
명령어를 사용하여 데이터를 쿼리하고 --destination_table
플래그를 지정하여 데이터를 추가할 테이블을 나타냅니다.
기존 대상 테이블에 쿼리 결과를 추가하도록 지정하려면 --append_table
플래그를 지정합니다.
데이터를 추가할 테이블의 모든 REQUIRED
열을 NULLABLE
로 변경하도록 지정하려면 --schema_update_option
플래그를 ALLOW_FIELD_RELAXATION
으로 설정합니다.
use_legacy_sql=false
플래그를 지정하여 쿼리에 GoogleSQL 구문을 사용합니다.
추가할 테이블이 기본 프로젝트가 아닌 다른 프로젝트의 데이터 세트에 있으면 프로젝트 ID를 PROJECT_ID:DATASET
형식으로 데이터 세트 이름에 추가합니다.
(선택사항) --location
플래그를 지정하고 값을 사용자 위치로 설정합니다.
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'QUERY'
다음을 바꿉니다.
LOCATION
: 위치의 이름.--location
플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을asia-northeast1
로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.PROJECT_ID
: 프로젝트 ID입니다.DATASET
: 추가할 테이블이 포함되어 있는 데이터 세트의 이름입니다.TABLE
: 추가할 테이블의 이름입니다.QUERY
: GoogleSQL 구문의 쿼리입니다.
예를 들면 다음과 같습니다.
기본 프로젝트에 다음 명령어 쿼리 mydataset.mytable
을 입력하여 쿼리 결과를 기본 프로젝트에도 있는 mydataset.mytable2
에 추가합니다. 이 명령어는 대상 테이블의 모든 REQUIRED
열을 NULLABLE
로 변경합니다.
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
기본 프로젝트에 있는 mydataset.mytable
을 쿼리하고 쿼리 결과를 myotherproject
의 mydataset.mytable2
에 추가하려면 다음 명령어를 입력합니다. 이 명령어는 대상 테이블의 모든 REQUIRED
열을 NULLABLE
로 변경합니다.
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
jobs.insert
메서드를 호출합니다. query
작업을 구성하고 다음 속성을 설정합니다.
destinationTable
속성을 사용하여 대상 테이블을 지정합니다.writeDisposition
속성을 사용하여 대상 테이블의 쓰기 처리를WRITE_APPEND
로 설정합니다.schemaUpdateOptions
속성을 사용하여 스키마 업데이트 옵션을 지정합니다.query
속성을 사용하여 GoogleSQL 쿼리를 지정합니다.
Go
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
자바
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
열의 기본값 변경
열의 기본값을 변경하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
탐색기 패널에서 프로젝트와 데이터 세트를 펼친 후 테이블을 선택합니다.
세부정보 패널에서 스키마 탭을 클릭합니다.
스키마 수정을 클릭합니다. 이 버튼을 보려면 스크롤해야 할 수도 있습니다.
현재 스키마 페이지에서 변경하려는 최상위 필드를 찾습니다.
해당 필드의 기본값을 입력합니다.
저장을 클릭합니다.
SQL
ALTER COLUMN SET DEFAULT
DDL 문을 사용합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 문을 입력합니다.
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET DEFAULT default_expression;
실행을 클릭합니다.
쿼리를 실행하는 방법에 대한 자세한 내용은 대화형 쿼리 실행을 참조하세요.
열 삭제
ALTER TABLE DROP COLUMN
DDL 문을 사용하여 기존 테이블에서 열을 삭제할 수 있습니다.
이 문은 삭제된 열과 연결된 스토리지를 즉시 확보하지 않습니다. 스토리지에서 열을 삭제할 때 스토리지에 미치는 영향에 대한 자세한 내용은 ALTER TABLE DROP COLUMN
문 세부정보를 참조하세요.
스토리지를 즉시 확보하기 위한 옵션은 두 가지가 있습니다.
SELECT * EXCEPT
쿼리로 테이블을 덮어씁니다.- 데이터를 Cloud Storage로 내보내고, 원치 않는 열을 삭제한 후 올바른 스키마를 사용해서 데이터를 새 테이블로 로드합니다.