BigQuery는 쿼리를 통해 스키마를 수정할 수 있다. 다만 제한적으로 수정할 수 있는데 Field 추가와 삭제는 가능하지만 특정 Nested Field의 내부에서 Field 추가는 불가능하다. 다행히 공식적으로 bq CLI 명령을 통해 수행이 가능하게 되어 있다. 이번 포스팅에서는 bq 명령을 통해 BigQuery 스키마를 수정하는 방법에 대해 설명하도록 하겠다.
0. bq?
bq 는 BigQuery용 Python 기반의 CLI 이다. 여기서는 bq를 어떻게 사용하고 설치하는 지에 대해서는 설명하지 않겠다. 아래 공식 문서를 참조하길 바란다.
gcloud CLI 설치 | Google Cloud CLI 문서
의견 보내기 gcloud CLI 설치 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에는 Google Cloud CLI 설치를 선택하고 유지하기 위한 안내가 포함되어 있습
cloud.google.com
bq 명령줄 도구 사용 | BigQuery | Google Cloud
bq 명령줄 도구와 기본값 및 플래그를 설정하는 방법을 설명합니다. 대화형 셸, 스크립트, 서비스 계정에서 bq 명령줄 도구를 사용해서 쿼리를 실행하는 방법을 보여줍니다.
cloud.google.com
1. 스키마 추출
먼저 테이블의 스키마를 수정하기 이전 해당 테이블의 스키마가 정의된 JSON 파일이 필요하다. 해당 파일은 다음 명령어로 추출할 수 있다.
bq show --schema --format=prettyjson {PROJECT}.{DATASET}.{TABLE} > schema.json
해당 명령어를 통해 {PROJECT}.{DATASET}.{TABLE}의 schema를 schema.json 이라는 파일로 추출할 수 있다.
[
{
"name": "field1",
"type": "STRING"
},
{
"name": "field2",
"type": "STRING"
},
{
"name": "field3",
"type": "DATETIME"
},
{
"description": "\uad6d\uc138",
"fields": [
{
"name": "nested_field1",
"type": "DATETIME"
},
{
"name": "nested_field2",
"type": "STRING"
}
],
"name": "field4",
"type": "RECORD"
}
]
2. 스키마 수정
스키마로 추출하게 되면 한글의 경우 unicode 형태로 encoding 되어 출력된다. 여기서 field4.nested_field2 를 삭제하고 싶다면 다음과 같이 수정하면 된다.
[
{
"name": "field1",
"type": "STRING"
},
{
"name": "field2",
"type": "STRING"
},
{
"name": "field3",
"type": "DATETIME"
},
{
"description": "\uad6d\uc138",
"fields": [
{
"name": "nested_field1",
"type": "DATETIME"
}
],
"name": "field4",
"type": "RECORD"
}
]
3. 수정 사항 반영
해당 필드를 삭제하고 다음 명령어를 실행하면 해당 필드가 사라진 채로 스키마가 수정된다.
bq update {PROJECT}:{DATASET}.{TABLE} schema.json
Reference
테이블 스키마 수정 | BigQuery | Google Cloud
테이블 스키마 수정 이 문서에서는 기존 BigQuery 테이블의 스키마 정의를 수정하는 방법을 설명합니다. 이 문서에 설명된 대부분의 스키마 수정 작업은 SQL 데이터 정의 언어(DDL) 문을 사용하여 수
cloud.google.com
'Data > BigQuery' 카테고리의 다른 글
[BigQuery] 동적 SQL문 작성하는 법 (0) | 2023.07.21 |
---|---|
[BigQuery] 비용 모니터링 구축기 (0) | 2023.07.07 |