BigQuery는 쿼리를 통해 스키마를 수정할 수 있다. 다만 제한적으로 수정할 수 있는데 Field 추가와 삭제는 가능하지만 특정 Nested Field의 내부에서 Field 추가는 불가능하다. 다행히 공식적으로 bq CLI 명령을 통해 수행이 가능하게 되어 있다. 이번 포스팅에서는 bq 명령을 통해 BigQuery 스키마를 수정하는 방법에 대해 설명하도록 하겠다.
0. bq?
bq 는 BigQuery용 Python 기반의 CLI 이다. 여기서는 bq를 어떻게 사용하고 설치하는 지에 대해서는 설명하지 않겠다. 아래 공식 문서를 참조하길 바란다.
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
'Data > BigQuery' 카테고리의 다른 글
[BigQuery] 동적 SQL문 작성하는 법 (0) | 2023.07.21 |
---|---|
[BigQuery] 비용 모니터링 구축기 (0) | 2023.07.07 |