Bigquery Table_Suffix 관련 error(적재되는 data type이 꼬였을 때)
BQ table에 있는 COLUMN 중 스키마 타입이 변경되었을 경우, TABLE_SUFFIX를 사용하지 못하는 경우에 대해 공유하려고 한다.
이것이 무슨 말인가 하니...
코드를 보며 이해해 보자
1. 상황
grade field 가 있는데 특정 날짜를 기준으로 해당 field의 type이 변경됨.
예시)
grade |
type |
20200128 이전 |
string |
20200128 이후 |
integer |
2. Table_suffix를 이용하여 쿼리를 날릴 경우!
SELECT grade
FROM `[project_id].[table_id].data_*`
WHERE _TABLE_SUFFIX = '20200127'
이러한 에러가 발생!!!
그러나 _table_suffix를 사용하지 않고 직접 입력해준다면...잘실행됨
SELECT grade
FROM `[project_id].[table_id].data_20200127`
그 이유가 무엇일까??
실험결과...
table_suffix를 쓰면 가장 최근 테이블을 참조하여 스키마 틀을 만들고 그 안에 _table_suffix 조건에 해당하는 데이터를 집어넣는 로직이다...
>> 최신 TABLE을 이용해 TYPE등의 틀을 만들고 데이터를 넣는 형태
--> TABLE_SUFFIX는 본래 특정 기간의 데이터를 불러오기 위해 설계된 것이기 때문으로 보임
20200128 을 기준으로 TYPE 이 STRING에서 INT64로 바꼈다.
이 경우, 20200128 로 _TABLE_SUFFIX를 날리면
가장 최신 TABLE인 _20200128 테이블로 TYPE이 INT64인 틀을 만들고
20200127 데이터를 넣게 되는데...
20200127 데이터는 TYPE이 STRING이기 때문에 위와 같은 에러가 나타나는 것이다.
역으로, 테이블 스키마가 변경된 20200128 이후
날짜에 대해서는 _TABLE_SUFFIX가 잘 작동한다
SELECT grade
FROM `[project_id].[table_id].data_*`
WHERE _TABLE_SUFFIX = '20200129'
stack overflow에 있는 나와 같은 문제를 겪은 사람