문제상황
빅쿼리는 다른 DB와 다르게 array 형태를 repeated 데이터 구조로 효율적으로 저장할 수 있다. (물론 다른 DB도 저장이 불가능한 것은 아니지만 권장하지는 않는다) 나 또한 array를 빅쿼리에 저장할 일이 있어 bigquery client를 이용하여 array를 저장하려고 하였는데, 이상하게 계속 빅쿼리에는 null로 적재가 되었다. 그런데 더 희한한 점은 로컬에서 테스트 하였을 때는 분명이 제대로 저장이 되었는데, 서버에서는 다시 null로 저장된다는 것이다.
해결방법
결론부터 말하자면 나는 csv 형태로 array를 저장하려고 하였는데, 이는 그리 좋은 방법이 아니다. csv 자체가 array에 그리 친화적이지 않고 빅쿼리 또한 csv 안에 있는 array를 인식하지 못한다고 한다. 해당 내용은 빅쿼리 공식 문서에도 나와있다. 그런데 희한하게 로컬에서 테스트할 때는 csv의 array를 인식하고 저장하여 의아했는데, 아마 사용하는 빅쿼리 클라이언트 버전에 따라 다른 것으로 보인다. 정확한 원인은 파악하지 못했지만 어찌됐든 모든 버전에서의 호환성을 위해서라면 csv를 이용하여 array를 로드하는 것은 추천하지 않는다.
그렇다면 무엇을 사용해야할까? 가장 간단한 방법은 바로 json을 사용하는 것이다. csv 또한 json으로 변경하기가 굉장히 용이하기 때문에 json을 이용한다면 별 문제없이 로드가 가능할 것이다. csv를 json으로 변경하는 법은 df.to_json(orient="records")를 이용하면 된다. 변환 이후에는 json으로 load 하는 것까지 잊지 않고 작업해주어야 한다. 전체적으로는 아래와 같은 함수를 만들어 변환하는 것이 좋다.
def json_from_df(df):
df_json = df.to_json(orient="records")
res = json.load(df_json)
return res
'데이터 엔지니어링 > Bigquery' 카테고리의 다른 글
400 No matching signature for function DATE for argument types: INT64. Supported (0) | 2022.08.28 |
---|
문제상황
빅쿼리는 다른 DB와 다르게 array 형태를 repeated 데이터 구조로 효율적으로 저장할 수 있다. (물론 다른 DB도 저장이 불가능한 것은 아니지만 권장하지는 않는다) 나 또한 array를 빅쿼리에 저장할 일이 있어 bigquery client를 이용하여 array를 저장하려고 하였는데, 이상하게 계속 빅쿼리에는 null로 적재가 되었다. 그런데 더 희한한 점은 로컬에서 테스트 하였을 때는 분명이 제대로 저장이 되었는데, 서버에서는 다시 null로 저장된다는 것이다.
해결방법
결론부터 말하자면 나는 csv 형태로 array를 저장하려고 하였는데, 이는 그리 좋은 방법이 아니다. csv 자체가 array에 그리 친화적이지 않고 빅쿼리 또한 csv 안에 있는 array를 인식하지 못한다고 한다. 해당 내용은 빅쿼리 공식 문서에도 나와있다. 그런데 희한하게 로컬에서 테스트할 때는 csv의 array를 인식하고 저장하여 의아했는데, 아마 사용하는 빅쿼리 클라이언트 버전에 따라 다른 것으로 보인다. 정확한 원인은 파악하지 못했지만 어찌됐든 모든 버전에서의 호환성을 위해서라면 csv를 이용하여 array를 로드하는 것은 추천하지 않는다.
그렇다면 무엇을 사용해야할까? 가장 간단한 방법은 바로 json을 사용하는 것이다. csv 또한 json으로 변경하기가 굉장히 용이하기 때문에 json을 이용한다면 별 문제없이 로드가 가능할 것이다. csv를 json으로 변경하는 법은 df.to_json(orient="records")를 이용하면 된다. 변환 이후에는 json으로 load 하는 것까지 잊지 않고 작업해주어야 한다. 전체적으로는 아래와 같은 함수를 만들어 변환하는 것이 좋다.
def json_from_df(df):
df_json = df.to_json(orient="records")
res = json.load(df_json)
return res
'데이터 엔지니어링 > Bigquery' 카테고리의 다른 글
400 No matching signature for function DATE for argument types: INT64. Supported (0) | 2022.08.28 |
---|