- geojson 파일을 bigquery 적재 (geography 활용)2020년 10월 06일 15시 35분 42초에 업로드 된 글입니다.작성자: DE 군고구마반응형
여러 가지 형태의 데이터를 bigquery에 넣어서 볼 수 있습니다.
이번 포스트에서는 그중에 하나인 geojson을 bigquery에 업로드하는 방법을 정리하였습니다.
이미 몇몇 블로그에서 geojson 적재하는 방법을 소개하고 있는데요.
안 되는 부분이 많아서 제가 직접 정리하였습니다.
사용된 환경은 MAC입니다.
또한 추가적으로 Python3가 필요합니다.
우선 geojson을 다운로드합니다. ( geojson 샘플 다운로드 )
아래와 같이 지정하고 Save 부분을 누르면 geojson으로 다운로드 가능합니다.
geojson 데이터 다운로드 다운로드한 파일을 bigquery에 넣을 수 있도록 줄 바꿈 형태의 JSON 파일로 만들어야 합니다.
저 같은 경우 jq를 사용하였습니다.
1brew install jqcs 간단하게 다운로드하고 다음의 구문을 입력하여 json으로 변환합니다.
1jq --compact-output '.features[] | (.geometry | tojson) as $g | . = .properties | .geometry |= $g' < 원본.geojson > 결과.jsoncs 변환된 파일을 보관하고 다음으로 bigquery에 넣기 위해서 스키마를 추출하는 python 코드를 이용해서 스키마를 추출합니다.(출처)
1234567891011121314151617181920212223242526import jsonwith open("파일위치", "r") as ifp:with open("to_load.json", "w") as ofp:features = json.load(ifp)["features"]# new-line-separated JSONschema = Nonefor obj in features:props = obj["properties"] # a dictionaryprops["geometry"] = json.dumps(obj["geometry"]) # make the geometry a stringjson.dump(props, fp=ofp)print("", file=ofp) # newlineif schema is None:schema = []for key, value in props.items():if key == "geometry":schema.append("geometry:GEOGRAPHY")elif isinstance(value, str):schema.append(key)else:schema.append("{}:{}".format(key, "int64" if isinstance(value, int) else "float64"))schema = ",".join(schema)print("Schema: ", schema)cs 위의 코드를 실행하면 아래와 같이 결괏값이 나옵니다.
Schema: geometry:GEOGRAPHY
여기서 geometry:GEOGRAPHY 가 스키마입니다. 이를 다음의 구문에 붙여 넣고 실행하면 bigquery에 로드됩니다.
1bq load --source_format NEWLINE_DELIMITED_JSON 데이터셋.테이블명 변환파일.json geometry:GEOGRAPHYcs 아래와 같이 결과 메시지가 나옵니다.
빅쿼리 적재 성공 메시지 위의 내용을 보면 json으로 변환된 파일을 UI에서 console로 직접 넣으려고 하시는 경우가 있는데 이 경우도 가능합니다.
다만 스키마를 지정해 주지 않고 "자동감지"로 넣으실 경우 다음과 같이 잘못된 결과가 나옵니다.
자동 감지 옵션으로 넣을 경우 bq로 적재 (위) 자동감지 적재(아래) 위와 같이 결과 값이 완전히 다른 데이터임을 확인할 수 있습니다.
자동감지를 할 경우 STRING으로 감지하여 데이터를 사용할 수 없으니 주의해야 합니다.
참고
stackoverflow.com/questions/24239056/load-geojson-in-bigquery
Load geojson in bigquery
What is the best way to load the following geojson file in Google Big Query? http://storage.googleapis.com/velibs/stations/test.json I have a lot of json files like this (much bigger) on Google S...
stackoverflow.com
www.44bits.io/ko/post/cli_json_processor_jq_basic_syntax
커맨드라인 JSON 프로세서 jq : 기초 문법과 작동원리
jq는 커맨드 라인 JSON 프로세서입니다. JSON 데이터를 입력받아 데이터를 필터링하거나 변형합니다. jq의 기본적인 문법과 작동 원리를 소개합니다.
www.44bits.io
medium.com/google-cloud/how-to-load-geojson-files-into-bigquery-gis-9dc009802fb4
How to load GeoJSON files into BigQuery GIS
An ETL pipeline for GeoJSON to BigQuery
medium.com
반응형'GCP > BigQuery' 카테고리의 다른 글
BigQuery - JSON 컬럼 파싱하기 (0) 2021.08.10 BigQuery 성능/비용 팁 (2) 2021.06.11 Python에서 BigQuery Query 실행 시 오류 (0) 2021.06.04 big query 비용을 줄이기 위한 전략 (2) 2020.03.04 big query(빅쿼리)에서 멱등성을 위한 전략 (0) 2020.02.26 다음글이 없습니다.이전글이 없습니다.댓글